linkais 发表于 2021-3-1 10:14:58

新手求助

#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 < pivot)
                                {
                                                i++;
                                }
                                while (array > pivot)
                                {
                                                j--;
                                }
                                if (i <= j)
                                {
                                                temp = array;
                                                array = array;
                                                array = 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);
                quick_sort(array,0,length-1);
                printf("排序的结果是:\n");
                for (i = 0;i < length;i++)
                {
                                printf("%d\n",array);
                }
                putchar('\n');
                return 0;
}
哪个大哥能看看这个哪里出问题了,为什么一运行就停止工作

洋洋痒 发表于 2021-3-1 10:59:27

好家伙,直接给我电脑干死机了。31行那里无限递归35行也是。虽然没看懂你的代码

巴巴鲁 发表于 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 < pivot)
                              {
                                                i++;
                              }
                              while (array > pivot)
                              {
                                                j--;
                              }
                              if (i <= j)
                              {
                                                temp = array;
                                                array = array;
                                                array = 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);
                quick_sort(array,0,length-1);
                printf("排序的结果是:\n");
                for (i = 0;i < length;i++)
                {
                              printf("%d\n",array);
                }
                putchar('\n');
                return 0;
}

linkais 发表于 2021-3-1 11:22:50

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

不好意思,不好意思,眼花打错了

linkais 发表于 2021-3-1 11:23:21

巴巴鲁 发表于 2021-3-1 11:15


是中位数,脑瘫了
页: [1]
查看完整版本: 新手求助