排序演算法總結

2021-07-02 01:27:03 字數 2266 閱讀 5550

排序演算法總是每個人必須掌握的,面試,筆試都會用到,今天又複習了一遍,分享給大家。

演算法分析:

1. 氣泡排序:

比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。

對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。

針對所有的元素重複以上的步驟,除了最後乙個。

持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較

第一種:氣泡排序,**如下:

void bubble_sort(int *arr,int len)

} }}

關於冒泡注意的問題,上篇博主有寫,有疑問的讀者可以參考下。

選擇排序:(主要找最小下標)

對比陣列中前乙個元素跟後乙個元素的大小,如果後面的元素比前面的元素小則用乙個變數k來記住他的位置,接著第二次比較,前面「後乙個元素」現變成了「前乙個元素」,繼續跟他的「後乙個元素」進行比較如果後面的元素比他要小則用變數k記住它在陣列中的位置(下標),等到迴圈結束的時候,我們應該找到了最小的那個數的下標了,然後進行判斷,如果這個元素的下標不是第乙個元素的下標,就讓第乙個元素跟他交換一下值,這樣就找到整個陣列中最小的數了。然後找到陣列中第二小的數,讓他跟陣列中第二個元素交換一下值,以此類推。

第二種:選擇排序:

//選擇排序————————

void swap(int *a,int *b)

void select_sort(int *a,int len)

if(index!=i)

swap(&a[index],&a[i]);

}}

插入排序:

從陣列裡面的第乙個元素開始,其餘視為要插入的元素key,將陣列裡面的數依次與要插入的數比較,key較小的話,陣列的數往後移一位,再與前面的書比較。小的話,放到後面。

第三種:插入排序:

//插入排序————————

void insert_sort(int *a,int n)

a[j]=temp;

}}

快速排序:

1)設定兩個

變數i、j,

排序開始的時候:i=0,j=n-1;

2)以第乙個

陣列元素作為關鍵資料,賦值給key,即key=a[0];

3)從j開始向前搜尋,即由後開始向前搜尋(j--),找到第乙個小於key的值a[j],將a[j]和a[i]互換;

4)從i開始向後搜尋,即由前開始向後搜尋(i++),找到第乙個大於key的a[i],將a[i]和a[j]互換;

5)重複第3、4步,直到i=j; (3,4步中,沒找到符合條件的值,即3中a[j]不小於key,4中a[i]不大於key的時候改變j、i的值,使得j=j-1,i=i+1,直至找到為止。找到符合條件的值,進行交換的時候i, j指標位置不變。另外,i==j這一過程一定正好是i+或j-完成的時候,此時令迴圈結束)

第四種:快速排序:

//快速排序——————————

void quick_sort(int *a,int left,int right)

a[i]=a[j];

while(i歸併排序:

第一步:申請空間,使其大小為兩個已經

排序序列之和,該空間用來存放合併後的序列

第二步:設定兩個

指標,最初位置分別為兩個已經

排序序列的起始位置

第三步:比較兩個

指標所指向的元素,選擇相對小的元素放入到合併空間,並移動指標到下一位置

重複步驟3直到某一指標超出序列尾

將另一串行剩下的所有元素直接複製到合併序列尾

第五種:歸併排序:void merge(int *source,int *temp,int start,int mid,int end)

while(i!=mid+1)

temp[k++]=source[i++];

while(j!=end+1)

temp[k++]=source[j++];

for(i=start;i<=end;i++)

source[i]=temp[i];

}void merge_sort(int *source,int *temp,int start,int end)

{ int mid;

if(start

排序演算法總結

1 直接插入排序 1 穩定性 穩定 2 適用情況 待排記錄規模較小,或者記錄已經基本有序 2 希爾排序 1 穩定性 不穩定 2 特點 希爾排序的執行時間依賴於增量序列,它的效率比直接插入排序有較大的改進。3 氣泡排序 1 穩定性 穩定 2 特點 當待排記錄基本有序是,氣泡排序是不錯的選擇 但由於氣泡...

排序演算法總結

1 選擇排序 選擇排序的思想是依次從待排序數列中選擇最大 小 的 第二大 小 的等等,然後依次重新排列為有序數列。void selectionsort int a,int n if min i 時間複雜度o n 2 2 歸併排序 void merge int a,int left,int mid,i...

排序演算法總結

學習了這麼多的排序演算法,還沒有做個總結,呵呵 氣泡排序 氣泡排序是最慢的排序演算法。在實際運用中它是效率最低的演算法。它通過一趟又一趟地比較陣列中的每乙個元素,使較大的資料下沉,較小的資料上公升。它是 o n 2 的演算法。快速排序 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來...