資料結構之排序

2021-09-12 09:02:31 字數 2195 閱讀 6755

二、交換類排序

四、歸併排序

五、分配類排序

在乙個有序列表內,對待排序的無序列表中記錄進行逐個處理,每一步將乙個待排序的記錄與同組那些已經排好序的記錄進行比較,然後有序插入到該有序序列表裡,直到所有的待排記錄全部插入為止。

實現一趟插入排序需要分三步

在r[1…i-1]中查詢r[i]的插入位置,

r[ 1.j ].key < r[j].key < r[ j+1…i-1 ].key;

將r[ j+1…i-1]中 的所有記錄均後移個位置;

將r[i] 插入(複製)到r[ j+1 ]的位置上。

void

inssort

(recordtype r,

int length)

r[j+1]

=r[0

]//將待插記錄插入到已排序的序列中

}}

我覺得我需要乙個pad(哈哈哈哈)

通過「交換」無序序列中的記錄從而得到其中關鍵字最小或最大的記錄,並將它加入到有序子串行中,以此方法增加記錄的有序子串行的長度。

基本思想:通過交換逆序元素進行排序的方法。

在掃瞄過程中順次比較相鄰的兩個元素大小,若逆序就交換位置

快速排序是對氣泡排序的一種改進。

實現一次交換消除多個逆序

從記錄得無序子串行中「選擇」關鍵字最小或最大的記錄, 並將它加入到有序子串行中,以此方法增加記錄的有序子串行的長度。

①簡單選擇排序

②樹型選擇排序

③堆排序

vodi selectsort

(recordtype r,

int n)}}

}

33

6846

3325

8019

121.

1268

4633

2580

1933

2.12

1946

3325

8068

333.

1219

2533

4680

6833

4.12

1925

3333

8068

465.

1219

2533

3346

6880

6.12

1925

3333

4668

80

歸併排序就是將兩個或兩個以上的有序序列合併成乙個有序數列的過程

//遞迴形式的二路歸併排序演算法

void

msort

(recordlist l, recordlist copyl,

int left,

int right)

}

46

1233

7268

1980

33//兩個乙份

1246

3372

1968

3380

//四個乙份

1233

4672

1933

6880

//八個乙份

1219

3333

4668

7280

使用就是lsd

(會持續更新)

資料結構之排序

在待排序的檔案中,若存在多個關鍵字相同的記錄,經過排序後這些具有相同關鍵字的記錄之間的相對次序保持不變,該排序方法是穩定的 若具有相同關鍵字的記錄之間的相對次序發生變化,則稱這種排序方法是不穩定的。穩定的排序 時間複雜度 空間複雜度 氣泡排序 最差和平均是o n2 最好是o n 1 雙向氣泡排序 最...

資料結構之排序

package com.small 注意a 0 是否有意思,書上c語言基本都是將a 0 作為哨兵,那麼0號元素不能用,我這裡全部是flag代替 author small leaf public class sort else for j i 1 j high 1 j a high 1 flag 希爾...

資料結構之排序

常用的幾種排序方法 冒泡 插入 選擇 快排 歸併排序 1 冒泡 以公升序為例,也是有兩種思路,1 num 0 依次與後面比較將最小的放到第一位 2 將最大的放到最後一位。我比較習慣用第一種 1 include include using namespace std int main for int ...