算法练习-3
已知顺序表a,元素类型是int,将a中所有小于表头元素的整数放在前半部分,大于表头元素的整数放在后半部分
PS:该算法是快速排序的核心步骤。
1 #include <stdio.h>
2 void f(int a[],int len)
3 {
4 int i=0,j=len-1;
5 int tmp=a[0];
6 while(i<j)
7 {
8 while(i<j && tmp<a[j]) j--;//i<j 容易遗漏
9 a[i++]=a[j];
10 while(i<j && tmp>a[i]) i--;//i<j 容易遗漏
11 a[j--]=a[i];
12 }
13 a[i]=tmp;
14 }
15
16 int main(int argc, char const *argv[])
17 {
18 int a[]={5,9,8,7,1,2,3};//将所有小于5的放前面,大于5的放后面
19 int len=sizeof(a)/sizeof(int);
20 f(a,len);
21 for(int i=0;i<len;i++) printf("%d\t", a[i]);
22 return 0;
23 }
运算结果: