二、交換類排序
四、歸併排序
五、分配類排序
在乙個有序列表內,對待排序的無序列表中記錄進行逐個處理,每一步將乙個待排序的記錄與同組那些已經排好序的記錄進行比較,然後有序插入到該有序序列表裡,直到所有的待排記錄全部插入為止。
實現一趟插入排序需要分三步
在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 ...