快速排序,分而治之。在同為o(n*logn)的幾種排序方法中效率較高。
#ifndef __quick_sort_h__
#define __quick_sort_h__
#include "assistance.h" // 輔助軟體包
#include template void quicksort(elemtype elem, int low, int high, int n)
// 操作結果:對陣列elem[low .. high]中的元素進行快速排序
elem[i] = e;
cout << "排序區間:" << low << "--" << high << ";中樞位置為:" << i << endl;
display(elem, n);
cout << endl;
if (low < i-1) quicksort(elem, low, i - 1, n); // 對子表elem[low, i - 1]遞迴排序
if (i + 1 < high) quicksort(elem, i + 1, high, n); // 對子表elem[i + 1, high]遞迴排序
}template void sort(elemtype elem,int a,int b)
//直接比較完成排序a~b
} }}void swap(int &a,int &b)
template void lzh(elemtype elem,int low,int high,int n)
// 操作結果:對陣列elem[low .. high]中的元素進行快速排序
while (i < j && elem[i] <= e) // 使i左邊的元素不大於樞軸元素
i++;
if (i < j)
}elem[i] = e;
/*cout << "排序區間:" << a << "--" << b << ";中樞位置為:" << i << endl;
display(elem, n);
cout << endl;*/
if((b-i)>(i-a))//較短的先入隊
if(b-i<=3)//很短直接比較完成排序
sort(elem,i+1,b);
else//否則還是要入隊
}else//(b-i)<=(i-a),則先b-i
if(i-a<=3)//很短直接比較完成排序
sort(elem,a,i-1);
else//否則還是要入隊}}
}#endif
#include "quicksort.h" // 快速排序演算法
#include int main(void)
{ int a[10000];
int n=10000;
for(int i=0;i部分執行結果:
資料結構學習筆記 遞迴
遞迴 乙個函式自己直接或間接呼叫自己。函式的呼叫 當在乙個函式的執行期間呼叫另乙個函式時,在執行被調函式之前,系統需要完成三間事 1 將所有的實際引數 返回位址 當被調函式完成後,接下來要執行的語句的位址 等資訊傳遞給被呼叫函式儲存。2 為被調函式的區域性變數 也包括形參 分配儲存空間。3 將控制轉...
資料結構學習筆記 遞迴 例項
part類用map存有孩子的類和資訊 數量 用string存有自己的名字name,如下 public class part 問題 通過成員函式count howmany part p 計算類物件擁有目標目標結點的數量 例如,howmany couch floor howmany couch hosp...
資料結構學習筆記 快速排序
今天花了一上午的時間終於明白快速排序的原理了,這裡和大家分享一下。比如有一串數字 52684 37,我們通過快速排序先找出第乙個數字 5 在這一串數字中的位置,然後再對數字 5 兩邊的數字進行同樣的排序方法,最終將整串數字排序完畢。找到第乙個數字 5 的具體步驟如下 從這串數字的兩頭出發,把第乙個數...