鱼C论坛

 找回密码
 立即注册
查看: 1589|回复: 4

[已解决]新手求助

[复制链接]
发表于 2021-3-1 10:14:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
void quick_sort(int *,int,int);
void quick_sort(int array[],int left,int right)
{
                int i = left;
                int j = right;
                int temp;
                int pivot = array[(right - left) / 2];
                while (i <= j)
                {
                                while (array[i] < pivot)
                                {
                                                i++;
                                }
                                while (array[j] > pivot)
                                {
                                                j--;
                                }
                                if (i <= j)
                                {
                                                temp = array[j];
                                                array[j] = array[i];
                                                array[i] = temp;
                                                i++;
                                                j--;
                                }
                                
                }
                if (j > left)
                {
                                quick_sort(array,left,j);
                }
                if (i < right)
                {
                                quick_sort(array,i,right);
                }
}
int main(void)
{
                int array[] = {45,69,88,33,55,22,16,77,987,44,61};
                int i,length;
                length = sizeof(array) / sizeof(array[0]);
                quick_sort(array,0,length-1);
                printf("排序的结果是:\n");
                for (i = 0;i < length;i++)
                {
                                printf("%d\n",array[i]);
                }
                putchar('\n');
                return 0;
} 
哪个大哥能看看这个哪里出问题了,为什么一运行就停止工作
最佳答案
2021-3-1 11:15:38
#include <stdio.h>
void quick_sort(int *,int,int);
void quick_sort(int array[],int left,int right)
{
                int i = left;
                int j = right;
                int temp;
                int pivot = array[(right + left) / 2]; // 这里求得难道不该是中位数吗? 
                while (i <= j)
                {
                                while (array[i] < pivot)
                                {
                                                i++;
                                }
                                while (array[j] > pivot)
                                {
                                                j--;
                                }
                                if (i <= j)
                                {
                                                temp = array[j];
                                                array[j] = array[i];
                                                array[i] = temp;
                                                i++;
                                                j--;
                                }
                                
                }
                
                if (j > left)
                {
                                quick_sort(array,left,j);
                }
                if (i < right)
                {
                                quick_sort(array,i,right);
                }
                
}
int main(void)
{
                int array[] = {45,69,88,33,55,22,16,77,987,44,61};
                int i,length;
                length = sizeof(array) / sizeof(array[0]);
                quick_sort(array,0,length-1);
                printf("排序的结果是:\n");
                for (i = 0;i < length;i++)
                {
                                printf("%d\n",array[i]);
                }
                putchar('\n'); 
                return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-1 10:59:27 | 显示全部楼层
好家伙,直接给我电脑干死机了。31行那里无限递归35行也是。虽然没看懂你的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-1 11:15:38 | 显示全部楼层    本楼为最佳答案   
#include <stdio.h>
void quick_sort(int *,int,int);
void quick_sort(int array[],int left,int right)
{
                int i = left;
                int j = right;
                int temp;
                int pivot = array[(right + left) / 2]; // 这里求得难道不该是中位数吗? 
                while (i <= j)
                {
                                while (array[i] < pivot)
                                {
                                                i++;
                                }
                                while (array[j] > pivot)
                                {
                                                j--;
                                }
                                if (i <= j)
                                {
                                                temp = array[j];
                                                array[j] = array[i];
                                                array[i] = temp;
                                                i++;
                                                j--;
                                }
                                
                }
                
                if (j > left)
                {
                                quick_sort(array,left,j);
                }
                if (i < right)
                {
                                quick_sort(array,i,right);
                }
                
}
int main(void)
{
                int array[] = {45,69,88,33,55,22,16,77,987,44,61};
                int i,length;
                length = sizeof(array) / sizeof(array[0]);
                quick_sort(array,0,length-1);
                printf("排序的结果是:\n");
                for (i = 0;i < length;i++)
                {
                                printf("%d\n",array[i]);
                }
                putchar('\n'); 
                return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-1 11:22:50 | 显示全部楼层
洋洋痒 发表于 2021-3-1 10:59
好家伙,直接给我电脑干死机了。31行那里无限递归35行也是。虽然没看懂你的代码

不好意思,不好意思,眼花打错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-1 11:23:21 | 显示全部楼层

是中位数,脑瘫了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-10 02:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表