Crazyeye 发表于 2020-5-31 11:33:06

快速排序代码问题

问题在代码注释里!!!!
问题在代码注释里!!!!
问题在代码注释里!!!!
问题在代码注释里!!!!

#include<stdio.h>

void quick_sort(int array[],int left,int right);
void quick_sort(int array[],int left,int right)
{
        int i=left,j=right;
        int temp;
        int pivot;
       
        pivot=array[(left+right)/2];
       
        while(i<=j)
        {
                while(array<pivot)
                {
                        i++;
                }
                while(array>pivot)
                {
                        j--;
                }
                if(i<=j)
                {
                        temp=array;
                        array=array;
                        array=temp;
                        i++;//这两行干嘛用的,没有这两行前边循环也会++啊!但是没有这两行就排序不出来了
                        j--;//这两行干嘛用的,没有这两行前边循环也会++啊!但是没有这两行就排序不出来了
                       
                }
        }
        if(left<j)
        {
                quick_sort(array,left,j);
        }
        if(i<right)
        {
                quick_sort(array,i,right);
        }
}

int main(void)
{
        int array[]={73,108,111,118,101,70,105,115,104,67,46,99,111,109};
        int i,length;
       
        length=sizeof(array)/sizeof(array);
        quick_sort(array,0,length-1);
       
        printf("快速排序后的结果为:");
        for(i=0;i<length;i++)
        {
                printf("%d ",array);
        }
        putchar('\n');
        return 0;
}


问题在代码注释里!!!!
问题在代码注释里!!!!
问题在代码注释里!!!!
问题在代码注释里!!!!

soupman 发表于 2020-6-1 20:09:01

这是碰到两个指针所指元素交换了,然后就要移动哨兵就是(j--),你这还有个i++,估计是和你选取的pivot有关,一般都是选第一个的吧即array

Mr、渐行渐远 发表于 2020-6-2 19:00:01

这个快排到最后一层,是数组里只剩下两个个元素,如果if里没有i++和j--
的话,就永远是i<j或者j==i,出不了while循环了,
不过这种算法比传统的快排快一点

Crazyeye 发表于 2020-6-6 14:13:16

Mr、渐行渐远 发表于 2020-6-2 19:00
这个快排到最后一层,是数组里只剩下两个个元素,如果if里没有i++和j--
的话,就永远是i

谢谢,我回复有点慢了
页: [1]
查看完整版本: 快速排序代码问题