关于快速排序C语言算法

#include <stdio.h>

void Quick_sort (int s[], int l, int r )
{
if(l<r){
int i=l,j=r,x=s[l];
while(i<j){
while(i<j&&s[j]>=x){j--;}//从右向左找第一个小于x的数
if(i<j){s[i++]=s[j];}
while(i<j&&s[i]<x){i++;}//从左到右找第一个大于等于x的数
if(i<j){s[j--]=s[j];}
}
s[i]=x;
Quick_sort(s,l,i-1);//递归
Quick_sort(s,i-1,r);
}

}

int main()
{
int arr[7] = { 1,9,7,6,5,35,15 };
int i;
printf("之前的数组:");
for (i = 0; i < 7; i++) printf("%3d", arr[i]);
printf("\n");
Quick_sort(arr, 0, 6);
printf("排序之后的数组:");
for (i = 0; i < 7; i++) printf("%3d", arr[i]);
printf("\n");
return 0;

}
可能是递归出错了显示不出来,麻烦各位各位大佬

第1个回答  2018-11-29
//一点小问题而已,已为你改好
#include <stdio.h>
void Quick_sort (int s[], int l, int r )
{
if(l<r)
{
int i=l,j=r,x=s[l];
while(i<j)
{
while(i<j&&s[j]>=x)
{j--;}//从右向左找第一个小于x的数
if(i<j)
{s[i++]=s[j];}
while(i<j&&s[i]<=x)
{i++;}//从左到右找第一个大于等于x的数
if(i<j)
{s[j--]=s[i];}
}
s[i]=x;
Quick_sort(s,l,i-1);//递归
Quick_sort(s,i+1,r);
}
}
int main()
{
int arr[7] = { 1,9,7,6,5,35,15 };
int i;
printf("之前的数组:");
for (i = 0; i < 7; i++) printf("%3d", arr[i]);
printf("\n");
Quick_sort(arr, 0, 6);
printf("排序之后的数组:");
for (i = 0; i < 7; i++) printf("%3d", arr[i]);
printf("\n");
return 0;
}追问

可以运行了啊,话说我错在哪里啊???

追答

自己对比着看一下,不就知道了。

本回答被提问者采纳
相似回答