(二)交換類排序
(三)選擇類排序
(四)歸併類排序
(五)基數排序
閱讀**是件非常枯燥的事,所以盡量每一行都加的注釋,方便閱讀理解。六、排序
(一)插入類排序
1、直接插入排序
/*
method:
直接插入排序法
param:
disorder_sqc 無序序列
num 無序序列的長度
*/int
insert_direct
(int disorder_sqc,
int num)
disorder_sqc[j+1]
= temp;
//插入值
}}
2、折半插入排序/*
method:
折半插入排序法
param:
order_sqc 無序序列
num 無序序列的長度
*/void
half_insert
(int disorder_sqc,
int num)
for(i =
2; i < num;
++i)
final_ = low;
//最後獲取low的位置,即為插入的值
}for
(int j = i -
1; j >= final_;
--j)
//將要插入位置之後的元素依次往後挪一位
disorder_sqc[final_]
= temp;
//插入到該位置
}}
3、希爾排序/*
method:
shell排序法
param:
order_sqc 無序序列
num 無序序列的長度
*/void
shell_sort
(int disorder_sqc,
int num)
insert_direct
(sub_sequence[i]
, sub_num)
;//取出來一組排序一組
} increment = increment /2;
//縮小增量
}for
(int i =
0; i < num; i++
)}
(二)交換類排序
1、氣泡排序
/*
method:
氣泡排序
param:
disorder_sqc 無序序列
num 無序序列的長度
*/void
bubble_sort
(int disorder_sqc,
int num)}if
(flag ==0)
//如果迴圈一遍之後,未發生交換,則排序完成
break;}
}
2、快速排序/*
method:
快速排序
param:
disorder_sqc 無序序列
low 無序序列的最小位置下標
high 無序序列的最大位置下標
*/void
quick_sort
(int disorder_sqc,
int low,
int high)
--j;
//如果經過上方break,則不操作這個
}while
(i < j)
//判斷序列內還有未操作的元素
++i;
//如果經過上方break,則不操作這個}}
disorder_sqc[i]
= temp;
//此時i=j,就是樞軸插入的位置
//上面while迴圈之後,即為一次樞軸比較,比樞軸小的元素都在左邊,比其大的元素都在右邊
quick_sort
(disorder_sqc, low, i -1)
;//按照相同操作 樞軸左邊的序列
quick_sort
(disorder_sqc, i +
1, high)
;//按照相同操作 樞軸右邊的序列
}}
(三)選擇類排序
1、簡單選擇排序
/*
method:
簡單選擇排序
param:
disorder_sqc 無序序列
num 無序序列的長度
*/void
select_sort
(int disorder_sqc,
int num)
temp = disorder_sqc[min_sub]
;//將最小值與第乙個元素互換位置
disorder_sqc[min_sub]
= disorder_sqc[i]
; disorder_sqc[i]
= temp;
}}
2、堆排序/*
method:
將陣列中low-high位置範圍內,對low上的結點進行調整,使其為最大
param:
disorder_sqc 無序序列
low 無序序列的最小位置下標
high 無序序列的最大位置下標
*/void
shift
(int disorder_sqc,
int low,
int high)
if(temp < disorder_sqc[j]
)//比較雙親結點與孩子結點的大小,如果孩子結點的值大,進行交換
else
break;}
disorder_sqc[i]
= temp;
//將調整的值放在最終位置
}
/*
method:
堆排序param:
disorder_sqc 無序序列
num 無序序列的長度
//注意:這裡將根結點作為陣列的[1]下標,可改為零,並且一定要更改找左右孩子結點的公式
*/void
heap_sort
(int disorder_sqc,
int num)
for(i = num; i >=2;
--i)
//為了換出根結點的值,將其放入最終位置
}
(四)歸併類排序
1、二路歸併排序(merge sort)
/*
method:
二路歸併排序
param:
disorder_sqc 無序序列
low 無序序列的最小位置下標
high 無序序列的最大位置下標
*/void
merge_sort
(int disorder_sqc,
int low,
int high)
}
(五)基數排序/*
method:
基數排序,比較數字
param:
disorder_sqc 無序序列
num 無序序列的長度
*/void
base_sort
(int disorder_sqc,
int num)
;//建立桶,用來存放相同位的陣列
for(
int i =
0; i < num;
++i)
while(1
) k =0;
//將k清零,用於取值
for(
int i =
0; i < maxsize;
++i)
//取出桶內的值
} calculate_time *=10
;//依次向高位比較
if(calculate_time >
pow(
10.0
, max_bit)
)break;}
}
資料結構 排序
小小總結了下 希望別不記得 排序型別 排序方法 平均時間 最壞時間 最好時間 穩定空間 插入直接插入 o n2 o n2 o n 穩定o 1 希爾排序 o n3 2 增量序列最後為1,只有公因子1 不穩o 1 選擇簡單選擇 o n2 o n2 o n 穩定o 1 堆排序o n lb n o n lb...
資料結構 排序
郝斌版 資料結構 學習筆記 冒泡 公升序,12比,大放後面,再23比,直至最大的在最後面 插入 2,3,4,依次插入值,保證插入值後的序列為有序的 選擇 後面所有的最小值依次排到最前 快速排序 歸併排序 22排,44排,88排.排序演算法標準 時間,空間,穩定性 排序和查詢的關係 排序是查詢的前提,...
資料結構 排序
1.希爾排序 shellsort 增量序列d n為要排序數的個數 void shellinsertsort int a,int n,int dk n個要排序的數,dk是增量 2 堆排序 已知h s m 除了h s 外均滿足堆的定義 調整h s 使其成為大頂堆.即將對第s個結點為根的子樹篩選,para...