插入排序
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...