注:所有排序都是寫的由小到大排序的情況
1.插入排序
1)直接插入排序(穩定)
arr[sortedindex+1]=key; //注意這裡的下標 sortedindex+1
}}
2)希爾排序 (不穩定)希爾排序好的增量序列的共同特徵:
希爾排序演算法&fromid=1801475&type=syn
① 最後乙個增量必須為1
② 應該盡量避免序列中的值(尤其是相鄰的值)互為倍數的情況
**:
void shellsort(int* arr, int len)
arr[sortedindex+gap] = key;}}
2.選擇排序1)直接選擇排序(不穩定)第一次從r[0]~r[n-1]中選取最小值,與r[0]交換,第二次從r[1]~r[n-1]中選取最小值,與r[1]交換,....,第i次從r[i-1]~r[n-1]中選取最小值,與r[i-1]交換,.....,第n-1次從r[n-2]~r[n-1]中選取最小值,與r[n-2]交換,總共通過n-1次,得到乙個按排序碼從小到大排列的有序序列·
初始狀態 [ 8 3 2 1 7 4 6 5 ] 8 1
第一次 [ 1 3 2 8 7 4 6 5 ] 3 2
第二次 [ 1 2 3 8 7 4 6 5 ] 3 3
第三次 [ 1 2 3 8 7 4 6 5 ] 8 4
第四次 [ 1 2 3 4 7 8 6 5 ] 7 5
第五次 [ 1 2 3 4 5 8 6 7 ] 8 6
第六次 [ 1 2 3 4 5 6 8 7 ] 8 7
第七次 [ 1 2 3 4 5 6 7 8 ] 排序完成
**:
void directchoosesort(int* arr, int len)
if(minindex!=keyindex)
}}
2)堆排序(不穩定)---最大堆最大堆性質:樹中每個結點的值都大於或者等於任意乙個子結點的值
給出了非遞迴和遞迴方法
//遞迴方法
void maxheapify_recursively(int* arr, int idx, int len)
void maxheapsort(int*arr, int len)
}
3.交換排序1)氣泡排序(穩定)**:
void bubblesort(int *arr, int len)
int partition(int *arr, int start, int end) }}
4.歸併排序(穩定)
**:
void merge(int* arr, int start, int end, int leftend)
while(leftbegin<=leftend)
pordered[index++]=arr[leftbegin++];
while(rightbegin<=end)
pordered[index++]=arr[rightbegin++];
for(int i=0;i=len)
return;
if(start
1)計數排序(穩定)
陣列中每個數都在[0,k]之間
(以十進位制為例,設每一位的排序基於計數排序的思想)
int maxbits(int* arr, int len,int base) //輔助函式,求資料的最大位數
}return nmaxbits;
}void radixsort(int* arr, int len) //基數排序
常用排序演算法總結
總結些常見的排序演算法,方便以後可以重用。資料量不大,為了表達方便就直接使用了陣列。int data null data new int 1.氣泡排序 氣泡排序,從小到大排序 for int i 0 i data.length i 氣泡排序就是說,排序的過程像水裡往上冒的氣泡一樣,每個數字代表乙個氣...
常用排序演算法總結
常用排序演算法總結 選擇排序 對於長度為n的陣列,選擇排序需要大約n2 2詞比較和n次交換。插入排序 對於隨機排列的長度為n且主鍵不重複的陣列 1 平均情況下,需要 n2 4次比較以及 n2 4次交換。2 最壞情況下,需要 n2 2次比較以及 n2 2次交換 3 最好情況下,需要n 1次比較以及0次...
常用排序演算法總結
includeusing namespace std show array void show int ar,int len selectsort 直接選擇排序不穩定 最好最壞平均時間複雜度都是o n 2 空間複雜度o 1 void selectsort int ar,int len else ar...