高階級排序演算法

2021-06-20 10:05:53 字數 1814 閱讀 8289

希爾排序:

void shellsort(int array, int len)// o(n*n)//希爾排序關鍵思想先分組,再分別插入排序

array[k] = temp;

}}while( gap > 1 );//迴圈條件,當gap=1時,恢復至插入排序

}//選gap的方式現在仍然是計算機界乙個大問題,目前的選擇都是根據大量工程實踐而來

快速排序:

int partition(int array, int low, int high)//一次劃分函式

swap(array, low, high);//當high小於基準時,交換位置

while( (low < high) && (array[low] <= pv) )

swap(array, low, high);//當low大於基準時,交換位置

}return low;//基準量

}void qsort(int array, int low, int high)//快速遞迴劃分

}void quicksort(int array, int len) // o(n*logn)//快速排序

歸併排序:

將兩個或兩個以上的有序序列合併成乙個新的有序序列:

有序序列v[1] …v[m]和v[m+1] …v[n] v[1] …v[n]

這種歸併方法稱為2路歸併。

將3個有序序列歸併為乙個新的有序 序列,稱為 3路歸併 。

將多個有序序列歸併為乙個新的有序序列, 稱為 稱為多路歸併。

void merge(int src, int des, int low, int mid, int high)//二路歸併函式,source,destination

else

}while( i <= mid )

while( j <= high )

}void msort(int src, int des, int low, int high, int max)//將src裡面的元素排序好之後,再將des中的值複製到src中

else

free(space);//釋放輔助空間}}

void mergesort(int array, int len) // o(n*logn)

希爾排序, 快速排序和歸併排序將排序演算法的時間複雜度提高到了o(n  * log n) ;

希爾排序和快速排序的排序結果是不穩定的,歸併排序的排序結果是穩定的;

歸併排序需要利用輔助空間,可直接做外排序!!

高階排序演算法 希爾排序

希爾排序 希爾排序是插入排序的優化版。回憶一下插入排序,假如插入排序執行到一半的時候,這時陣列左邊是已經排好序的,而右邊是還沒有排序的。如果有乙個很小的資料項恰好在右邊的位置,這時所有左邊已排好序的陣列都得往右移,騰出空位讓這個小的資料項插入。希爾排序是在插入演算法的基礎上再次降低交換的次數,以此獲...

排序演算法(nlogn級)

歸併排序 merge 函式是合併兩個有序序列,使用了two pointers的思想,可以看看演算法筆記上的記錄 將陣列a的 l1,r1 與 l2,r2 區間合併成有序區間 此處l2即為 r1 1 const int max 100 void merge t a,int l1,int r1,int l...

高階硬菜 排序演算法高階

下面這一章所講解到演算法將是最精彩和有趣的,涉及到的演算法思路將會在你以後的 中經常使用 講解到的演算法有歸併排序 快速排序 堆排 桶排序。歸併排序 merge sort 是利用歸併的思想實現的排序方法,該演算法採用經典的分治策略 divide and conquer 分治法將問題分 divide ...