c 各種排序演算法 更新中

2021-08-17 11:57:22 字數 1654 閱讀 5149

博主初學者,有什麼錯誤或不足還望指正。

快速排序

思路:取出乙個數q,通過交換使其左邊的數都小於它的值,右邊的數的都大於它的值將原序列以q為界分成兩個子串行,對左右兩個子串行再次進行上述過程,直到子串行都只含乙個元素。

/*

author hlx

date 2018/3/24

xmu*/

#include using namespace std;

inline void swap (int a,int i,int j)

//用於交換數列中的兩個值

void qsort (int a,int left,int right)

//遞迴終止條件,left == right(也就是只有遞迴序列只有乙個數)

int last = left;

swap (a,left,(left + right) / 2);

//將數列中間的數q交換到數列最左端

//12 2 46 7 5 18 46 -> 7 2 46 12 5 18 46

for (int i = left + 1;i <= right;i++) }

//7 2 46 12 5 18 46 -> 7 2 5 12 46 18 46

swap(a,left,last);

//把中間的數q換回中間,使其前面的數都小於它後面的數都大於它

//7 2 5 12 46 18 46 -> 5 2 7 12 46 18 46

qsort(a,left,last - 1);

qsort(a,last + 1,right);

//中間的數q位置不變對左右兩部分做相同的操作

}int main()

; int left = 0;

int right = sizeof(a) / sizeof(int) - 1;

//數列從0開始所以right為數列所含元素個數-1

qsort(a,left,right);

for (int i = left;i <=right;i++)

else

}while (begin1 <= end1)

while (begin2 <= end2)

for (i = 0;i < size;i++)

free(temp);

}//對子序列進行有序的合併

void mergesort(int a,int begin,int last)

else

return;

}//遞迴呼叫將原序列分割成若干個只含乙個元素的子串行

int main()

; int size = sizeof(date) / sizeof(int);

mergesort(date,0,size - 1);

for (int i = 0;i < size;i++)

int main()

; const int size = 5;

int i;

for (i = 0;i < size;i++)

make_heap(arr.begin(),arr.end(),cmp);

for (i = 1;i <= size;i++)

return 0;

}

C 各種排序演算法

public class sorter 插入排序法 public static void insertionsort int list list j t 選擇排序法 public static void selectionsort int list int t list min list min l...

排序演算法,更新中

原理 從第乙個數開始,設其下標i 0,和後乙個位置數相比較,若左側值 右側值,兩數交換位置,i下標右移,再將i下標指向的數與右側數相比較,直到所有元素左側值都小於右側值。演算法 do boolean flag false 從位置1到最後乙個未排過序的元素 若左側元素 右側元素 兩元素交換位置 fla...

排序演算法,更新中

原理 從第乙個數開始,設其下標i 0,和後乙個位置數相比較,若左側值 右側值,兩數交換位置,i下標右移,再將i下標指向的數與右側數相比較,直到所有元素左側值都小於右側值。演算法 do boolean flag false 從位置1到最後乙個未排過序的元素 若左側元素 右側元素 兩元素交換位置 fla...