请教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;
#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