算法导论前面几章看来好几遍了,每次都是快速排序、归并排序、堆排序及计数排序等,每次到时都能写一遍,但是时间一长还是有些遗忘,现在为了督促自己,写几篇博客吧,把几种排序算法写一下。注意一下,快速排序与对排序是不稳定的,而归并排序与计数排序是稳定的。
下面先看看快速排序的c代码实现。
#include<stdio.h>
int partition(int array[], int p, int q);
void quick_sort(int array[], int p, int q);
int main()
{
int array[10] = {3,8,9,18,1,28,29,15,39,10};
int i;
for (i = 0; i < 10; i++)
printf("%d ", array[i]);
printf("\n");
quick_sort(array, 0, 9);
for (i = 0; i < 10; i++)
printf("%d ", array[i]);
printf("\n");
return 0;
}
int partition(int array[], int p, int q)
{
int i = p;
int j = i - 1;
int key = array[q];
int temp;
while (i < q) {
if (array[i] <= key)
{
j++;
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
i++;
}
array[q] = array[j+1];
array[j+1] = key;
return j+1;
}
void quick_sort(int array[], int p, int q)
{
if (p < q) {
int par = partition(array, p, q);
quick_sort(array, p, par - 1);
quick_sort(array, par + 1, q);
}
}