資料結構學習筆記 7 非遞迴快速排序

2021-08-01 14:49:17 字數 1534 閱讀 6780

快速排序,分而治之。在同為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 的具體步驟如下 從這串數字的兩頭出發,把第乙個數...