The C programming language上的版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include<stdio.h>

void qsort(int v[],int left,int right);

int main()
{
int v[]={32,89,99,435};
int i;
qsort(v,0,3);
for(i=0;i<4;i++)
printf("%d ",v[i]);
return 0;
}

void qsort(int v[],int left,int right)
{
int i,last; /*last用于放置最后一个小于基准数的位置*/
void swap(int v[],int i,int j);

if(left>=right) /*若数组包含的元素少于两个*/
return; /*则不执行任何操作*/
swap(v,left,(left + right)/2); /*把将划分子集的元素移到最左边*/
last = left; /*移动到v[0]*/
for(i=left+1;i<=right;i++) /*划分子集*/
if(v[i]<v[left])
swap(v,++last,i);
swap(v,left,last); /*恢复划分子集的元素*/
qsort(v,left,last-1); /*处理左边的*/
qsort(v,last+1,right); /*处理右边的*/
}

void swap(int v[],int i,int j)
{
int temp;

temp = v[i];
v[i] = v[j];
v[j] = temp;
}