聊聊效率較高的幾種常用排序演算法

2021-08-09 20:22:07 字數 2428 閱讀 3043

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 可以在大部分的架構上很有效率地被實...