排序演算法總結

2021-07-22 23:15:08 字數 1450 閱讀 8946

選擇,快速,希爾,堆排序為不穩定排序,插入,冒泡,歸併,基數排序為穩定排序。

插入排序:

將資料分為有序部分和待排序部分,每次將待排序部分的第乙個元素在有序部分中找到插入的位置,並將其插入。

for(int i=1;i=0;j--)

else

}}

希爾排序:

先將要排序的一組數按某個增量d分成若干組,每組中記錄的下標相差d.對每組中全部元素進行排序,然後再用乙個較小的增量,在每組中再進行排序。當增量減到1時,整個要排序的數被分成一組,排序完成。

void shellsort(int a,int len)  

a[j+step] = temp; //將第乙個位置填上

} }

}

氣泡排序

相鄰元素兩兩比較,每趟交換以後的最後乙個位置就是最大的。

for (int i = 0; i < length - 1; i++) 

}break; //一趟比較沒有發生交換說明有序,直接跳出

}}

快速排序

每次選取待排序區間的第乙個元素作為基準記錄,之後將整個區間分為兩部分,小於基準的部分和大於基準的部分,之後遞迴處理兩個區間。

void quick_sort(int l,int r)

while(i選擇排序:

每趟操作將待排序部分最小的元素放再待排序部分的最前面。可以直接通過待排序部分第乙個元素和待排序部分所有元素的交換來實現。

for(int i=0;idata[j])

}}

歸併排序

借用乙個陣列,將兩個有序部分歸併,每次從兩個有序部分中取出最小的元素放入陣列中。

void merge_sort(int l, int r) 

int mid = (l + r) / 2;

merge_sort(l, mid);

merge_sort(mid + 1, r);

int x = l, y = mid + 1,

loc = l; // x,y為兩個有序區間待選取元素的下標,loc為陣列待插入的下標

while (x <= mid || y <= r) else

loc++;

}for (int i = l; i <= r; i++)

}

排序演算法總結

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 的演算法。快速排序 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來...