選擇排序是一種較為簡單的排序演算法。它的實現原理是每一次從待排序的資料元素中挑出乙個最小(大)的元素,存放在資料的起始(末尾)位置,直到所有待排序的資料排完。
直接插入排序:
當插入第i個元素的時候,我們認為它前面的i個元素已序。
這時候用array[i]的排序嗎與前面的排序碼進行比較,找到適合的位置就進行插入,原來位置上的元素按順序向後移動。
時間複雜度: 最差:和所需要的序列相反 o(n^2)
最優:和所需要的系列相同 o(n)
空間複雜度:o(1)
穩定性:不穩定
**如下:
void insertsort(int *array, int size)
array[end+1] = key;
}}
二分插入排序:
在插入排序中,如果比較操作的代價大於資料交換的代價時,這時候二分查詢的作用就很明顯了。通過二分查詢,我們可以減少比較操作的次數。
時間複雜度: 最差:o(n^2)
最優:n o(lgn)
空間複雜度:o(1)
穩定性:穩定
void binarysort(int *array, int size)
for (int j = i - i; i >= left; j--)}}
當資料量較多的時候,二分插入排序可以很大程度上的減少資料的比較次數。但是當資料接近有序時,直接插入排序就要優於二分插入排序。
希爾排序:
希爾排序較之直接插入排序效率高在:直接插入排序每次只能移動乙個資料,而希爾排序每次可以移動增量數個資料。排序的時間複雜度大幅度提高。
void shellsort(int *array, int size)
break;}}
}
排序演算法 插入排序(直接插入,二分插入,希爾)
第乙個數預設有序。從第二個數開始,從後往前掃瞄。若取出數 當前數,則指標不斷前移,直到取出數 當前數時,把取出數插入到當前位置。public static int insertsort int arr arr pre 1 cur return arr 以下過程具體說明了兩個數是怎麼實現有序的 pre...
插入排序 直接插入排序
直接插入排序演算法思想 將整個資料表分成左右兩個子表,其中左子表為有序表,右子表為無序表 整個排序過程就是將右子表中的元素逐個插入到左子表中,直到右子表為空,而左子表成為新的有序表。演算法過程分析 將待排序的元素存放在陣列r n 1 中,在初始狀態下,r 0 為監視哨,r 1 為有序區,r 2 r ...
插入排序 直接插入排序
一.插入排序的基本思想 將乙個記錄插入已排序好的有序表中,從而得到乙個新的記錄數加1的有序表。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。所謂的哨兵,就是即將插入的記錄。二.示例 如果碰見相等的元素,會被插到後面,所以,相等元素的前後順序沒有改變,插入排序是穩定的。三.演算法實現 public ...