C语言实现快速排序
快速排序简介:
即是一个递归的过程,比如对数组a[5] = {1,3,4,5,2}排序。
首先找到一个指标元素,这里取(0+5)/2 = 2即中间的元素a[2];
然后根据a[2]=4排序;
比4小的放到左面,比4大的放到右边。
a[5] = {1,3,2,4,5};
然后分别对数组{1,3,2}和数组{5}进行同样的排序。
递归到没法分割为止。
C代码如下:
#include <stdio.h>
#define LENGTH 10
void swap(int[], int, int);
void qsort(int [],int, int);
void printarray(int [], int);
int main(void)
{ int a[LENGTH] = {10,9,3,49,37,38,1,434,3,10};
qsort(a, 0, LENGTH-1);
printarray(a,LENGTH);
return 0;
}
void qsort(int a[], int left, int right)
{
int i,j,k,last;
if(left >= right)
return;
i = (left + right)/2;
swap(a,left, i);
last = left;
for(i = left+1; i<=right; i++)
{
if(a[i] < a[left])
swap(a,++last, i);
}
swap(a,last,left);
qsort(a,left,last-1);
qsort(a,last+1, right);
}
void swap(int a[], int i, int j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
void printarray(int a[],int length)
{
int i;
printf("Elements of the array is:");
if(length <= 0)
return;
for(i = 0;i <length; i++)
printf("%d:", a[i]);
}