排序演算法總結

2021-09-24 22:54:01 字數 2032 閱讀 2940

排序演算法可以分為內部排序外部排序

內部排序是資料記錄在記憶體中進行排序。

而外部排序是因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。

常見的內部排序演算法有:插入排序、希爾排序、選擇排序、氣泡排序、歸併排序、快速排序、堆排序、基數排序等。

用一張圖概括:

思想:從後往前將陣列中的元素兩兩比較,交換兩者的位置取小的那乙個元素,直到陣列開頭。重複這一過程,直到最後兩個元素比較之後交換位置

(1)平均時間複雜度o(n2),是穩定排序

(2)最壞時間複雜度o(n2),逆序的時候

(3)最好時間複雜度o(n),順序的時候

void bubble_sort(vector&array)

}if(!flag)

break;}}

從頭到尾依次掃瞄未排序序列,將掃瞄到的每個元素插入有序序列的適當位置

(1)平均時間複雜度o(n2),穩定排序

(2)逆序情況每次迴圈都要比較n次,時間複雜度o(n)

(3)最好情況順序,時間複雜度o(n)

void insert_sort(vector&array)

else}}

}

void shellsort(int a,int n,int incre,int m)

a[k]=temp;

} printf("第%d次排序:",i);

for(l=0;l從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾

(1)平均時間複雜度o(n2),不穩定排序

(2)最壞和最好情況都是o(n2),因為每個迴圈都要比較n次

void select_sort(vector&array)

if(min != i)

swap(array[min], array[i]);}}

(1)堆排序是不穩定排序(2)最好和最壞時間複雜度都是o(nlogn)

void adjust(vector&num, int p, int n)

num[parent] = temp;

}void heap_sort(vector&array)

}

(1)是穩定排序(2)最壞和最好時候的時間複雜度都是o(nlogn)

#include#includeusing namespace std;

void merge(vector&array, int l, int r, int rightend)

while(l <= leftend)

temp[i++] = array[l++];

while(r <= rightend)

temp[i++] = array[r++];

for(int i = num-1; i >= 0; i--)

array[rightend--] = temp[i];

}void merge_sort(vector&array, int start, int end)

}int main()

array[low] = pivot;

return low;

}void quick_sort(vector&array, int start, int end)

}int main()

排序演算法總結

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