标签:star 交换 有一个 int start code 扫描 while int 重复
方法一:
#include <stdio.h>
void qusort(int s[],int start,int end)
{
int i,j;
i=start; /*将每组首个元素赋给i*/
j=end; /*将每组末尾元素赋给j*/
s[0]=s[start]; /*设置基准值*/
while(i<j)
{
while(i<j&&s[0]<s[j])
j--; /*位置左移*/
if(i<j)
{
s[i]=s[j]; /*将s[j]放到s[i]的位置上
i++; /*位置右移*/
}
while(i<j&&s[i]<s[0])
i++;
if(i<j)
{
s[j]=s[i];
j--;
}
}
s[i]=s[0];
if(start<i)
qusort(s,start,j-1);
if(i<end)
qusort(s,j+1,end);
}
void main()
{
int i,a[11];
printf("请输入10个数:\n");
for(i=1;i<11;i++)
scanf("%d",&a[i]);
qusort(a,1,10);
printf("排序后的顺序是:\n");
for(i=1;i<11;i++)
printf("%5d",a[i]);
}
方法二:
#include <stdio.h>
#include <stdlib.h>
void qusort(int a[],int start,int end)//对start和end之间的元素排序
{
int i,j,t;
i=start;
j=end;
if(start<end)//区间内至少存在两个元素
{
t=a[start];//用区间的第一个元素做基准
while(i!=j){//从区间两端开始扫描,直到i和j相等
while(a[j]>=t&&i<j)//从右向左,找到第一个小于t的元素
j--;
a[i]=a[j];//i,j上的元素交换
while(a[i]<=t&&i<j)
i++;
a[j]=a[i];
}
a[j]=t;
qusort(a,start,j-1);
qusort(a,j+1,end);
}
}
void main()
{
int i,a[10];
printf("请输入十个数:");
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
qusort(a,0,9);
printf("排序后的数组为:");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
}
标签:star 交换 有一个 int start code 扫描 while int 重复
原文地址:https://www.cnblogs.com/breathee/p/9369778.html