一、排序的分類:
穩定排序與不穩定排序:
假設 ri = rj ,且排序前序列中 ri 領先於 rj ;
若在排序後的序列中 ri 仍領先於 rj ,則稱排序方法是穩定的。
若在排序後的序列中 rj 仍領先於 ri ,則稱排序方法是不穩定的。
例:序列 3 15 8 8 6 9
若排序後得 3 6 8 8 9 15 穩定的
若排序後得 3 6 8 8 9 15 不穩定的
內排和外排:
根據排序過程中待排序記錄是否全部放置在記憶體中,排序分為內排和外排。
內部排序: 指的是待排序記錄存放在計算機隨機儲存器中進行的排序過程。
外部排序: 指的是待排序記錄的數量很大,以致記憶體一次不能容納全部記錄,在排序過程中尚需對外存進行訪問的排序過程。
二、排序演算法的效能分析:
演算法的複雜性:體現在執行該演算法時的計算機所需資源的多少上,計算機資源最重要的是時間和空間(即暫存器)資源,因此複雜度分為時間和空間複雜度。
輔助空間:輔助空間是評價排序演算法的乙個重要指標,輔助空間是指除了存放待排序資源之外,執行演算法所需要的其他儲存空間。
時間複雜度:簡單的說就是程式迴圈執行的總的次數。演算法的時間複雜度是乙個函式,它定量描述了該演算法的執行時間。時間複雜度常用大o符號表述,即o(f(n))。
三、按照排序過程中所依據的原則的不同可以分類為:
►插入排序
直接插入排序 希爾排序
►交換排序
氣泡排序 快速排序
►選擇排序
簡單選擇排序 堆排序
►歸併排序
►基數排序
四、直接插入排序:
穩定性:穩定
時間複雜度: o(n^2)
(1)初始資料正序,總比較次數:n-1
(2)初始資料逆序,總比較次數:(n2+n-1)/2=o(n2)
(3)初始資料無序,第i趟平均比較次數(i+1)/2,總次數為:(n2+3n)/4=o(n2)
(4)可見,原始資料越趨向正序,比較次數和移動次數越少
#include
void insertsort(int par_array, int array_size)
else
}par_array[j + 1] = temp;}}
int main()
;int length = sizeof(a) / sizeof(a[0]);
insertsort(a, length);
for (i = 0; i < length; i++)
printf("\n");
return 0;
}
插入排序 直接插入排序
直接插入排序演算法思想 將整個資料表分成左右兩個子表,其中左子表為有序表,右子表為無序表 整個排序過程就是將右子表中的元素逐個插入到左子表中,直到右子表為空,而左子表成為新的有序表。演算法過程分析 將待排序的元素存放在陣列r n 1 中,在初始狀態下,r 0 為監視哨,r 1 為有序區,r 2 r ...
插入排序 直接插入排序
一.插入排序的基本思想 將乙個記錄插入已排序好的有序表中,從而得到乙個新的記錄數加1的有序表。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。所謂的哨兵,就是即將插入的記錄。二.示例 如果碰見相等的元素,會被插到後面,所以,相等元素的前後順序沒有改變,插入排序是穩定的。三.演算法實現 public ...
插入排序 直接插入排序
直接插入排序的基本思想 將乙個記錄插入到已排序好的有序表中,然後得到乙個新記錄數增1的有序表。也就是 先將序列的第1個記錄看成是乙個有序的子串行,然後從第2個記錄逐個進行插入,直至整個序列有序為止。如果碰見乙個和插入元素相等的,那麼插入元素把想插入的元素放在相等元素的後面。所以,相等元素的前後順序沒...