博主初學者,有什麼錯誤或不足還望指正。
快速排序
思路:取出乙個數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...