排序有內部排序和外部排序,內部排序是資料記錄在記憶體中進行排序,而外部排序是因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。
我們這裡說說八大排序就是內部排序。
當n較大,則應採用時間複雜度為
o(nlog2n)
的排序方法:快速排序、堆排序或歸併排序序。
快速排序:是目前基於比較的內部排序中被認為是最好的方法,當待排序的關鍵字是隨機分布時,快速排序的平均時間最短;
基本思想:
將乙個記錄插入到已排序好的有序表中,從而得到乙個新,記錄數增1的有序表。即:先將序列的第1個記錄看成是乙個有序的子串行,然後從第2個記錄逐個進行插入,直至整個序列有序為止。
要點:設立哨兵,作為臨時儲存和判斷陣列邊界之用。
直接插入排序示例:
如果碰見乙個和插入元素相等的,那麼插入元素把想插入的元素放在相等元素的後面。所以,相等元素的前後順序沒有改變,從原無序序列出去的順序就是排好序後的順序,所以插入排序是穩定的。
演算法的實現:
它的核心思想為:將乙個記錄插入到乙個已經排序好的表中,以得到乙個記錄增一的有序表。並且最關鍵的一點就是它把比當前元素大的記錄都往後移動,用以騰出「自己」該插入的位置。當
n-1趟插入完成後該記錄就是有序序列。
#include "stdio.h"
void insert_sort(int a,int n)
//待排序元素用乙個陣列
a表示,陣列有
n個元素
a[j+1]=temp;//元素後移後要插入的位置就空出了,找到該位置插入}
} void main();
int i=0;
insert_sort(array,6);
for(;i<=5;i++)
printf("[%d]",array[i]);
getch(); }
效率:
時間複雜度:o(n^2).
八大排序 直接插入排序
直接插入排序 straight insertion sort 的基本操作是將乙個元素插入到序列已經有序的那一部分中去,從而使序列中有序的部分逐漸擴大,直到整個序列有序。博主認為直接插入排序過程比較容易理解,所以不作過多贅述,直接上 include void main int length sizeo...
八大排序 插入排序 直接插入排序
基本思想 將乙個記錄插入到已排序好的有序表中,從而得到乙個新,記錄數增1的有序表。即 先將序列的第1個記錄看成是乙個有序的子串行,然後從第2個記錄逐個進行插入,直至整個序列有序為止。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。直接插入排序示例 如果碰見乙個和插入元素相等的,那麼插入元素把想插入的...
排序演算法之一 直接插入排序
直接插入排序中加入了附加記錄,又稱監視哨或者哨兵。哨兵的主要作用 進人查詢 插入位置 迴圈之前,它儲存了r i 的副本,使不致於因記錄後移而丟失r i 的內容 它的主要作用是 在查詢迴圈中監視下標變數j是否越界。一旦越界 即j 0 因為r 0 可以和自己比較,迴圈判定條件不成立使得查詢迴圈結束,從而...