快速排序,好评如潮,即便不懂,正确的源码,你也值得拥有
——————————————————————————————
//sort.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int partition(int arr[], int low, int high)
{
int i=low, j=high;
int pivot = arr[low];
while(i<j)
{
while(i<j&&arr[j]>=pivot)
{
j--;
}
if (i<j)
{
arr[i] = arr[j];
i++;
while(i<j&&arr[i]<=pivot)
{
i++;
}
if (i<j)
{
arr[j] = arr[i];
j--;
}
}
}
arr[i] = pivot;
return i;
}
void quicksort(int arr[], int left, int right)
{
if (left<right)
{
int pivotpos = partition(arr, left, right);
quicksort(arr, left, pivotpos-1);
quicksort(arr, pivotpos+1, right);
}
}
void main()
{
int arr[] = {38, 65, 65, 20, 47, 54, 01, 12, 27};
int len = sizeof(arr)/sizeof(int);
quicksort(arr, 0, len-1);
for(int i=0; i<len; i++)
{
printf("%d ", arr[i]);
}
printf(" ");
}
//result
# ./sort
1 12 20 27 38 47 54 65 65
Finally:
据说,C++ 标准库里就有qsort,这个就是快速排序。
可是,正在用C的同学怎么办,无他 ,就用上面这段代码去改吧。模板我可以保证没有错误!!!