C 資料結構 排序 上

2022-04-02 20:23:44 字數 2582 閱讀 6549

看了幾天的排序內容,現在和大家分享一些常見的排序方法。

啥是排序?

個人理解的排序:通過對陣列中的值進行對比,交換位置最終得到乙個有序的陣列。排序分為記憶體排序和外部排序。本次分享排序方法都為記憶體排序。

啥是排序的穩定性?

假定在待排序的記錄序列中,存在多個具有相同的關鍵字的記錄,若經過排序,這些記錄的相對次序保持不變,即在原序列中,ri=rj,且ri在rj之前,而在排序後的序列中,ri仍在rj之前,則稱這種排序演算法是穩定的;否則稱為不穩定的。

常見排序:

氣泡排序,選擇排序,直接插入排序,希爾排序,堆排序,歸併排序,快速排序。

來張圖展示一下種排序的關係:

排序思想:兩兩比較相鄰記錄的關鍵字,如果反序則交換,直到沒有反序的記錄為止。

複雜度:o(n^2)。

穩定性:穩定。

氣泡排序是我最早接觸的排序演算法,理解起來比較簡單。排序入門級,容易理解,通過不斷交換位置來排序。

**例項:

int list = ;

inttemp;

for (int i = 0; i < list.length; i++)

}}console.writeline(

"氣泡排序的結果:

", string.join("

,", list));

第乙個for迴圈取資料中乙個值list[i],第二個for迴圈已第乙個for迴圈中的下乙個值(j=i+1)開始取值list[j]。然後依次對比兩值的大小list[i] > list[j],如果陣列中前面的值大於後面的值,替換他兩的位置。始終保持陣列中左邊的值小於右邊的值。

氣泡排序還有其他很多版本這裡就不一一分享。

排序思想:每一趟在n-i+1(i=1,2,…n-1)個記錄中選取關鍵字最小的記錄作為有序序列中第i個記錄。

複雜度:o(n^2)。

穩定性:穩定。

**例項:

int list = ;

intminindex, temp;

for (int i = 0; i < list.length; i++)

}if (minindex!=i)

}console.writeline(

"選擇排序的結果:

", string.join("

,", list));

第乙個for迴圈陣列中元素list[i],把當前迴圈的值預設為是最小值。記錄下標賦值給minindex。第二個for迴圈已第乙個for迴圈中的下乙個值(j=i+1)開始取值list[j]。然後依次和list[minindex]對比,如果list[j]選擇排序相對氣泡排序交換位置次數少,排序效能略優氣泡排序。

排序思想

每次從無序表中取出第乙個元素,把它插入到有序表的合適位置,使有序表仍然有序。

第一趟比較前兩個數,然後把第二個數按大小插入到有序表中;

第二趟把第三個資料與前兩個數從前向後掃瞄,把第三個數按大小插入到有序表中;依次進行下去,進行了(n-1)趟掃瞄以後就完成了整個排序過程。

複雜度:o(n^2)。

穩定性:穩定。

**例項:

int list = ;

inttemp, j;

for (int i = 1; i < list.length; i++) /*

從資料第二位開始迴圈 [無序序列]

*/ list[j + 1] =temp;

}}console.writeline(

"直接插入排序的結果:

", string.join("

,", list));

第乙個for迴圈(從陣列第二位置開始迴圈)陣列中元素list[i],如果迴圈的當前值list[i]比陣列中上乙個值list[i-1]要小,宣告臨時變數temp記錄list[i]。然後根據第乙個for迴圈的i值,反向迴圈陣列,查詢小於list[i]的下標位置。然後替換list[j+1]的值。

資料結構 排序(C )

直接插入排序 時間複雜度 o n 2 空間複雜度 o 1 void insertsort int r,int n for j i 1 j high j 將high後面的元素全部後移一位 r j 1 r j r high 1 temp 插入元素 希爾排序 時間複雜度 o n 2 空間複雜度 o 1 v...

資料結構與演算法之排序(上)

對於冒泡這個排序演算法,相信大家都不陌生,所以我們更加深入的來看一下這個演算法,討論一下他的時間複雜度,最好情況是當所有元素都按公升序排列好了,這個時候的時間複雜度是o n 多少個元素就比較了多少次。為了不讓排序無腦的進行下去,我們加了乙個flag標記,排好序便會自動退出。最壞的情況下,都是逆序排的...

資料結構排序大全 C

排序大全 插入排序 氣泡排序 二叉樹排序 歸併排序及其他線形排序是穩定的 選擇排序 希爾排序 快速排序 堆排序是不穩定的 插入排序 氣泡排序 選擇排序的時間複雜性為 o n2 其它非線形排序的時間複雜性為 o nlog2n 線形排序的時間複雜性為 o n 歸併排序的輔助空間為 o n 其它排序的輔助...