一些排序方法(堆排,歸併,快排,計數排)

2021-06-26 12:48:41 字數 1100 閱讀 1156

感覺學校演算法課挺水的,不過程式設計這東西還是要靠自己想,自己琢磨,老師也只能幫你指引下。菜鳥我還是好好敲**吧。。。。

計數排序:其他排序方法都是依靠元素之間的比較從而產生次序,而計數排序是依靠元素計算,得出自己在序列中的位置

//計數排序(設元素均為非負整數)

#include #include using namespace std;

const int maxn = 50;

int size = 8;

int a[maxn] = ;

int b[maxn];//儲存最後排列順序

int c[maxn];//c[lp...rp],lp,rp應分別對應陣列 最小和最大值,即lp <= min(a),rp >= max(a)

//c[i]代表 <= i元素個數,即i在排序後的位置

void counting_sort()

}int main()

;void merge(int p,int q,int r)

else

}}void merge_sort(int p,int r)

}int main()

;//從1開始儲存

int size = 10;//排序元素數量

void heapify(int num)//對下標num元素構造堆

}void build_heap()

}void heap_sort()

;int size = 8;

//兩種劃分方法,感覺後一種效率高些

/*int partition(int p,int r)//以a[r]為基準元素比較

} swap(a[i + 1],a[r]);

return i + 1;}*/

int partition(int lp,int rp)

a[lp] = tmp;

return lp;

}void quick_sort(int p,int r)

}int main()

{ freopen("out.txt","w",stdout);

quick_sort(0,7);

for(int i = 0;i < size;i++)

cout<

快排 歸併 堆排

快排 include include include includeusing namespace std void quicksort vector a,int l,int r 終止遞迴的條件,子串行長度為1 int mid low high low 2 取得序列中間的元素 mergesort a...

排序總結 快排 歸併 堆排

1.煞筆快排 假設我們對陣列進行快速排序。首先在這個序列中找乙個數作為基準數,為了方便可以取第乙個數。遍歷陣列,將小於基準數的放置於基準數左邊,大於基準數的放置於基準數右邊。此時得到類似於這種排序的陣列。在初始狀態下7是第乙個位置,現在需要把7挪到中間的某個位置k,也即k位置是兩邊數的分界點。那如何...

對歸併 堆排 快排的一些總結。

這三個演算法的理論時間複雜度都是nlogn,但是區別還是很大的。這三個演算法裡,實際效率最低的是堆排序,因為在每次調整大根堆的時候,都把底層元素交換到了根,然後再調整,而底層元素又不可能大於原根元素的兩個孩子節點,因此非等概率調整,做了很多次無效交換,因此實際效率最低。歸併排序時間效率最高,並且穩定...