您的位置:首页 > 其它

第15周 啊哈算法 快速排序算法

2016-07-07 14:44 260 查看
问题及代码:

/*快速排序算法:从右边高位开始找,再从左边开始,直到相遇与基数对换,然后递归循环调用*/
#include<stdio.h>
int a[101],n;
void quicksort(int left,int right)
{
int i,j,t,temp;
if(left>right) //定义两边面对面走,相遇就停止往前走了
return;

temp=a[left]; //temp存的是基数
i=left;
j=right;
while(i!=j)
{
while(a[j]>=temp && i<j) //右边大于基数的留在右边
j--;
while(a[i]<=temp && i<j) //左边小于基数的留在左边
i++;
if(i<j) //除去上面两个条件的情况,且满足i与j未相遇,余下的所有数都交换.为了后面实现交换,所以不能将if(i<j)用来控制整体循环
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
a[left]=a[i]; //基数与相遇的值交换
a[i]=temp;

quicksort(left,i-1); //继续左边同上操作,递归循环
quicksort(i+1,right);
}
int main()
{
int i,j,t;

scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
quicksort(0,n-1); //快速排序调用
for(i=0;i<n;i++)
printf("%d",a[i]);

getchar();getchar(); //暂停程序
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: