#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個位置的資料繼續與後續位置的資料進行比較,直到位置...