1、快速排序:主要思想是找個基準,將資料分成兩半,不斷迭代排序。注意所有元素都比基準大、或者都比基準小的情況。不穩定,交換位置時會造成相等元素調換前後位置。
#include using namespace std;
void quicksort(int *a, int left, int right)
int key = a[left]; //1、找基準元素,假設是左邊第乙個
int i = left+1;
int j = right;
int tmp = 0;
while(i < j)
while(i < j && key >= a[i]) //3、從左往右找,找到第乙個比key大的停止。小心i越界
if (i < j)
}if (i == j && key > a[i]) //5、此時,i、j左邊的(如果有)全比key小,右邊(如果)全比key大;可能key右邊全部比key大,此時不交換
quicksort(a, left, i - 1);/*最後用同樣的方式對分出來的左邊的小組進行同上的做法*/
quicksort(a, j + 1, right);/*用同樣的方式對分出來的右邊的小組進行同上的做法*/
}int main()
; quicksort(a, 0, sizeof(a) / sizeof(a[0]) - 1);
for(int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
cout << endl;
return 0;
}
#include #include void swap(int *a, int*b)
int quicksort(int a, int low, int high)
int i = first, j = mid+1;
int k = 0;
while (i<=mid && j<=end)
while (i <= mid)
tmp[k++] = src[i++];
while (j <= end)
tmp[k++] = src[j++];
for (int i = 0; i < k; ++i)
return 0;
}int mergesort(int src, int first, int end, int tmp)
int mid = (first+end)/2;
mergesort(src, first, mid, tmp); //左邊排序
mergesort(src, mid+1, end, tmp); //右邊排序
mergearray(src, first, mid, end, tmp); //合併
return 0;
}int main(int argc, char const *argv)
; int tmp[7];
mergesort(a, 0, 6, tmp);
for (int i = 0; i < 7; ++i)
cout << endl;
return 0;
}
3、堆排序:第一步建堆從倒數第乙個非葉子節點調整(假設是最大堆,堆頂就是最大元素);第二步不斷取出堆頂,將最後乙個元素移至堆頂,重新調整。用陣列可約記憶體。
不穩定,當最後乙個元素調整到堆頂時相等的元素就會調換位置。
#include using namespace std;
// 二叉樹的基本操作
#define parent(i) ((i)>>1)
#define leftchild(i) ((i)<<1)
#define rightchild(i) (((i)<<1)+1)
void printarray(int * array)
}/**
* 堆排序
* @param array 傳入需要排序的陣列,注意此陣列是從位置1開始,位置0存放陣列陣列元素的個數
*/void heapsort(int * array)
int arraysize = array[0]; //取出堆頂後,堆的大小是要變化的
//下面開始每次都取出堆裡面堆頂位置的元素,再次進行堆性質維護
for(int k = array[0] ; k >=2 ; --k)
array[0] = arraysize;
}int main(int argc, char const *argv)
; array[0] = sizeof(array)/sizeof(int) - 1;
heapsort(array);
printarray(array);
return 0;
}
幾種排序演算法及其效率對比
public class bubblesort sort arr system.out.println arrays.tostring arr long start system.currenttimemillis sort arr long end system.currenttimemillis...
幾種常用的排序演算法
介紹 快速排序是由東尼 霍爾所發展的一種排序演算法。在平均狀況下,排序 n 個專案要 n log n 次比較。在最壞狀況下則需要 n 2 次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他 n log n 演算法更快,因為它的內部迴圈 inner loop 可以在大部分的架構上很有效率地被實...
幾種常用的排序演算法
介紹 快速排序是由東尼 霍爾所發展的一種排序演算法。在平均狀況下,排序 n 個專案要 n log n 次比較。在最壞狀況下則需要 n 2 次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他 n log n 演算法更快,因為它的內部迴圈 inner loop 可以在大部分的架構上很有效率地被實...