c 內部排序演算法

2021-06-29 04:42:54 字數 2359 閱讀 7594

#include using namespace std;

/* *《直接插入排序》

* 為了實現n個數的排序,將後面n-1個數依次插入到前面已排好的子串行中,

*假定剛開始第1個數是乙個已排好序的子串行。經過n-1趟就能得到乙個有序序列。

*****時間複雜度:最好情況o(n),最壞情況o(n^2),平均情況o(n^2).

*****空間複雜度:o(1)

*****穩定性:穩定

*/void insertsort( int* p, int nlen )

else

}}}/*

*《折半插入排序》

* 與直接插入排序不同的是,折半插入排序不是邊比較邊移動,而是將比較和移

*動操作分離出來,即先折半查詢出元素的待插入位置,然後再統一地移動待插入位

*置之後的所有元素。不難看出折半插入排序僅僅是減少了比較的次數。

*****時間複雜度:o(n^2)

*****空間複雜度:o(1)

*****穩定性:穩定

*/void binaryinsertsort( int arr, int nlen )

else

}for(j=i; j>nmid; --j)

arr[nmid] = ntemp;

}}/*

*《希爾排序》

* 希爾排序通過比較相距一定間隔的元素,即形如l[i,i+d,i+2d,...i+kd]的序列

*然後縮小間距,再對各分組序列進行排序。直到只比較相鄰元素的最後一趟排序為

*止,即最後的間距為1。希爾排序有時也叫做*縮小增量排序*

*****時間複雜度:依賴於增量序列的選擇,但最壞情況才為o(n^2)

*****空間複雜度:o(1)

*****穩定性:不穩定

*/void shellsort( int arr, int nlen )}}

}}/*

*《氣泡排序》

* 氣泡排序的基本思想是從後往前(或從前往後)兩兩比較相鄰元素的值,若為

*逆序,則交換它們,直到序列比較完。我們稱它為一趟冒泡。每一趟冒泡都會將一

*個元素放置到其最終位置上。

*****時間複雜度:最好情況o(n),最壞情況o(n^2),平均情況o(n^2)

*****空間複雜度:o(1)

*****穩定性:穩定

*/void bubblesort( int arr, int nlen )

}if( !flag )

}}/*

*《快速排序》

* 快速排序是對氣泡排序的一種改進。其基本思想是基於分治法:在待排序表l[n]

*中任取乙個元素pivot作為基準,通過一趟排序將序列劃分為兩部分l[1...k-1]和

*l[k+1...n],是的l[1...k-1]中的所有元素都小於pivot,而l[k+1...n]中所有元素

*都大於或等於pivot。則pivot放在了其最終位置l(k)上。然後,分別遞迴地對兩個子

*序列重複上述過程,直至每部分內只有乙個元素或空為止,即所有元素放在了其最終

*位置上。

*****時間複雜度:快排的執行時間與劃分是否對稱有關,最壞情況o(n^2),最好情況

*o(nlogn),平均情況為o(nlogn)

*****空間複雜度:由於需要遞迴工作棧,最壞情況為o(n),平均情況為o(logn)

*****穩定性:不穩定

*/int partition(int a, int low, int high)

a[low] = a[high];

while(lowarr[largest+1])

++largest;

if( ntemp > arr[largest] )

else

}arr[i] = ntemp;

}void buildheap( int arr, int nlen )

void sortheap( int arr, int nlen)

}int main( int argc, char *argv)

; int nlen = sizeof(arr)/sizeof(int);

//insertsort(arr, nlen);

//binaryinsertsort(arr, nlen);

//shellsort(arr, nlen);

//bubblesort(arr, nlen);

//sortheap(arr, nlen);

// selectedsort(arr,nlen);

quicksort(arr, 0, nlen-1);

for(int i=0; icout

}

內部排序演算法

內部排序是指待排序列完全存放在記憶體中所進行的排序過程,適合不太大的元素序列。1.快速排序int partition int a,int low,int high a low a high while low2.並歸排序 void merging int list1,int list1 size,i...

內部排序演算法

內部排序演算法就是指記憶體中的排序演算法,而外部排序演算法則是指待排序資料過多,無法一次性載入到記憶體中,排序過程需要讀取磁碟,因此需要考慮磁碟 io 的消耗!內部排序演算法按照操作型別可大致分為五類 插入排序 交換排序 選擇排序 歸併排序 計數排序 內部排序演算法按照時間複雜度可大致分為三類 簡單...

內部排序演算法 選擇排序

選擇排序法可使用兩種方式排序 從小到大或從大到小 例如 當n個資料需要由大至小排序時,首先將第乙個位置的資料依次和第2 3 4 n個位置的資料進行比較。如果資料大於或等於其中乙個位置,則不變 若小於其中乙個位置的資料,則兩個位置的資料互換。互換後第1個位置的資料繼續與後續位置的資料進行比較,直到位置...