请教C语言 快速排序问题

来源:百度知道 编辑:UC知道 时间:2024/07/01 03:18:07
#include<stdio.h>
#define MAX 20
void Quick_Sort(int[ ], int, int);

int main(void)
{
int list[MAX] = {12, 2, 1, 45, 32, 13, 90, 76, 0, 31, 40, 77, 22, 87, -1, 22, 66, 7, -4, 10};
int i, j;

printf("原始数组\n");
for(i = 0; i < MAX; i++)
printf("%4d", list[i]);

printf("快速排序后:\n");

Quick_Sort(list, 0, MAX- 1);
for(j = 0; j < MAX; j++)
printf("%4d", list[j]);

return 0;

}

void Quick_Sort(int list[ ], int left, int right) //lfet = 0, right = MAX
{
int s;
int i, j;
int temp;

if(left < right)
{
s = list[left];
i = left;
j = right + 1;

while(1)
{
while(i + 1 < MAX && list[++i] < s)
while(j - 1 > -1 && list[--j] > s)

if(i >= j)
{
break;

没仔细看你的程序,我按标准原理写了个,你看看

void Quick_Sort(int list[ ], int left, int right) //lfet = 0, right = MAX
{
int s;
int i, j;
int temp;

if(left < right)
{
s = list[left];
i = left-1;
j = right + 1;

while(i+1!=j) {
if(list[i+1]<=s)
i++;
else if(list[j-1]>s)
j--;
else {
temp=list[i+1];
list[++i]=list[j-1];
list[--j]=temp;
}
}

list[left] = list[i];
list[i] = s;

Quick_Sort(list, left, i - 1); //对左边递归
Quick_Sort(list, i + 1, right); //对右边递归

}

}

if(i >= j)
{
break;
temp = list[i];
list[i] = list[j];
list[j] = temp;
}
都中断跳出了还交换什么啊??

while(1)应该是死循环了啊,1永远为真,而你函数体内也没有相应的退出循环代码break啊。

你的快速排序要用哪一种排序方式阿?

if(i >= j)
{
break;
temp = list[i];
list[i] = list