初次學習排序演算法

2021-10-08 23:26:51 字數 1732 閱讀 1452

排序演算法:本次主要是功能的實現,各種演算法的優劣未作討論

氣泡排序,每次將其中的元素,兩兩比較(是相鄰的兩個元素比較),如果前者大於後者,則交換其中數值,假設共有n個元素,外層迴圈只需要n-1次(兩兩比較嘛),由於每次迴圈將最大的值一直冒泡到最後面,所以我們下一次比較的結束位置可以前移,第一次我們將最大的值挪到最後面,第二次時,就可以不用管,以此類推。

c語言公升序實現:

//氣泡排序

void

bubble_sort

(int

*p,int l)}}

}

選擇排序:

拿出乙個元素和剩餘的其他元素比較,也是需要兩層迴圈,外層控制次數,內層比較大小。每次迴圈結果是將最小值放到最前面,在席次排序前,前面已經是有序數列,不需要再參加下一次迴圈。

c語言公升序實現:

//選擇排序

void

select_sort

(int

*p,int l)}if

(pos!=i)

}}

插入排序:

首先取第二位的值置為pos,判斷他的前面是否有小於他的值,如果有,將其後移一位,一直判斷到首位元素或者找不到更小的值時,就空出乙個位置,將其pos的值賦給那個空的位置。

注意:在最後的pos填補的那個空缺的位置,由於在迴圈中,對j減完之後判斷的不能進入迴圈內部,所以就是*(p+j+1)=pos。

c語言公升序實現:

void

resert_sort

(int

*p,int l)

//插入排序

*(p+j+1)

=pos;

//pos補產生的空缺

}}

快速排序:

優點在於快速,每次交替換三個值,冒泡選擇排序新定義變數,而快速排序將陣列中的三個元素進行交替,效率更高,

思想:首先固定乙個變數pos(位置為i),通常取首位,從右向左找比他小的值位置為j,找到後將其放到首位(i位),

然後從左向右查詢比他大的值(新i位),放到剛才的位置(j位),新i位放pos值,i和j在同時向中間移動,邊尋找邊替換,直到i=j,乙個組內替換完畢,

然後利用遞迴求他的前面的和後面的有序數列,直到遞迴的前後下標相等;

c語言**實現:

void

quick_sort

(int

*p,int left,

int right)

//快速排序

if(pl//判斷終止迴圈的條件是找到類更小值,還是下標到達界限

*(p+pl)=*

(p+pr)

;//如果找到小值,替換

while

(pl*(p+pl)

if(pl//判斷迴圈終止條件

*(p+pr)=*

(p+pl)

;//替換}*

(p+pl)

=pos;

//填補原來的呢個坑

quick_sort

(p,left,pl-1)

;//遞迴呼叫

quick_sort

(p,pl+

1,right);}

}

這些都是最基礎的排序,還有不同的變形,時間複雜度也未作討論,不同的演算法有不同的優缺點,主要看針對於什麼樣的資料,作者目前還是乙個小小白,出錯的地方希望大家指正,也希望自己在程式設計的路上保持一顆學習的心。

Linux初次學習

1 define first tss entry 4 2 define first ldt entry first tss entry 1 3 define tss n unsigned long n 4 first tss entry 3 4 define ldt n unsigned long ...

Karrigell 初次學習

今天按照 http karrigell.sourceforge.net en front.htm 教程,一口氣學完了 karrigell 的入門內容,一邊看一邊試驗完了所有的基本功能。感覺很興奮。這個框架可謂是麻雀雖小,五臟俱全。而且語法直觀,使用也非常的靈活。另外,在 unicode 的處理方面和...

Spring Cloud初次學習

微服務 單體架構 1 複雜性逐漸變高2 技術債務逐漸上公升3 部署速度逐漸變慢4 阻礙技術創新5 無法按需伸縮架構演進 1 單體2 soa3 微服務定義 通訊通過 rest api 或者rpc,實現微服務之間的通訊 優點 1 易於開發和維護2 啟動較快3 區域性修改容易部署缺點 1 運維要求比較高,...