算法练习-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 }

运算结果:

 

posted @ 2019-11-22 19:47  细雨轻风  阅读(117)  评论(0编辑  收藏  举报