排序演算法(一)

2021-08-28 23:19:34 字數 1904 閱讀 7316

插入排序

void

insertionsort

( elementtype a,

int n )

}

希爾排序(可採用不同增量)
void

shellsort

( elementtype a,

int n )

;for

( si=

0; sedgewick[si]

>=n; si++);

/* 初始的增量sedgewick[si]不能超過待排序列長度 */

for( d=sedgewick[si]

; d>

0; d=sedgewick[

++si]

)for

( p=d; p)}

void

swap

( elementtype *a, elementtype *b )

void

percdown

( elementtype a,

int p,

int n )

a[parent]

= x;

}void

heapsort

( elementtype a,

int n )

}

歸併排序(遞迴實現)
/* 歸併排序 - 遞迴實現 */

/* l = 左邊起始位置, r = 右邊起始位置, rightend = 右邊終點位置*/

void

merge

( elementtype a[

], elementtype tmpa,

int l,

int r,

int rightend )

while

( l <= leftend )

tmpa[tmp++

]= a[l++];

/* 直接複製左邊剩下的 */

while

( r <= rightend )

tmpa[tmp++

]= a[r++];

/* 直接複製右邊剩下的 */

for( i =

0; i < numelements; i++

, rightend --

) a[rightend]

= tmpa[rightend]

;/* 將有序的tmpa複製回a */

}void

msort

( elementtype a[

], elementtype tmpa,

int l,

int rightend )

}void

mergesort

( elementtype a,

int n )

else

printf

("空間不足");

}

/* 歸併排序 - 迴圈實現 */

/* 這裡merge函式在遞迴版本中給出 ,但是可以刪去遞迴版本中merge的最後一句,即刪去將tempa複製回a*/

/* length = 當前有序子列的長度*/

void

merge_pass

( elementtype a[

], elementtype tmpa,

int n,

int length )

void

merge_sort

( elementtype a,

int n )

free

( tmpa );}

else

printf

("空間不足");

}

排序演算法(一)

這個學期課程很少,空閒時間很多,故重新複習了一下 演算法導論 中的常用演算法和資料結構,並且將實現 儲存到部落格,以便大三暑假找實習時方便複習。直接插入排序的思想非常簡單,將序列中第乙個元素作為乙個有序序列,然後將剩下的n 1個元素按關鍵字大小依此插入該有序序列,每插入乙個元素後依然保持該序列有序,...

排序演算法一

3個簡單的排序演算法,不多解釋了,直接上 include include void display int a,int n printf n void exchange int a,int i,int j 氣泡排序 void popsort int a,int n end for j printf ...

排序演算法(一)

氣泡排序 基本思想 在要排序的一組數中,對當前還未排好序的範圍內的全部數,自上而下對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉 較小的往上冒。即 每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。氣泡排序的示例 演算法實現 void print int arr,int size...