快速排序代码问题
问题在代码注释里!!!!问题在代码注释里!!!!
问题在代码注释里!!!!
问题在代码注释里!!!!
#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;
}
问题在代码注释里!!!!
问题在代码注释里!!!!
问题在代码注释里!!!!
问题在代码注释里!!!! 这是碰到两个指针所指元素交换了,然后就要移动哨兵就是(j--),你这还有个i++,估计是和你选取的pivot有关,一般都是选第一个的吧即array 这个快排到最后一层,是数组里只剩下两个个元素,如果if里没有i++和j--
的话,就永远是i<j或者j==i,出不了while循环了,
不过这种算法比传统的快排快一点 Mr、渐行渐远 发表于 2020-6-2 19:00
这个快排到最后一层,是数组里只剩下两个个元素,如果if里没有i++和j--
的话,就永远是i
谢谢,我回复有点慢了
页:
[1]