排序分類 直接插入排序

2021-08-15 16:14:09 字數 1390 閱讀 7625

一、排序的分類:

穩定排序與不穩定排序:

假設 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個記錄逐個進行插入,直至整個序列有序為止。如果碰見乙個和插入元素相等的,那麼插入元素把想插入的元素放在相等元素的後面。所以,相等元素的前後順序沒...