排序演算法可以分為內部排序和外部排序。
內部排序是資料記錄在記憶體中進行排序。
而外部排序是因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。
常見的內部排序演算法有:插入排序、希爾排序、選擇排序、氣泡排序、歸併排序、快速排序、堆排序、基數排序等。
用一張圖概括:
思想:從後往前將陣列中的元素兩兩比較,交換兩者的位置取小的那乙個元素,直到陣列開頭。重複這一過程,直到最後兩個元素比較之後交換位置
(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 的演算法。快速排序 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來...