資料結構 排序(Code)

2021-09-26 16:11:44 字數 4186 閱讀 1426

(二)交換類排序

(三)選擇類排序

(四)歸併類排序

(五)基數排序

閱讀**是件非常枯燥的事,所以盡量每一行都加的注釋,方便閱讀理解。

六、排序

(一)插入類排序

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...