很棒棒{:10_256:}{:10_256:} 其它8种排序算法的标题最后都打了一个指针符,唯独这个快速排序算法没有,小甲鱼老师莫非是在暗示我们什么吗?{:9_241:} 快速排序是最常用的,必须掌握 {:10_266:} 谢谢 麻了{:10_282:} 小甲鱼🐟🐟,快速排序不是应该每一趟将基准移动到最终位置上么,那个7没到最终位置啊 #include<stdio.h>
void qick(int a[],int left,int right)
{
int i = 0,j = 0,tem,p;
i = left;
j = right;
p = a[(i + j) / 2];
while(i < j)
{
while(a < p)
i++;
while(a > p)
j--;
if(i <= j)
{
tem = a;
a = a;
a = tem;
i++;
j--;
}
}
if(left < j)
qick(a,left,j);
if(right > i)
qick(a,i,right);
}
int main(void)
{
int i,len;
int array[] = {73, 108, 111, 118, 101, 70, 105, 115, 104, 67, 46, 99, 111, 109};
len = sizeof(array) / sizeof(array);
qick(array,0,len - 1);
for(i = 0;i < len;i ++)
{
printf("%d ",array);
}
return 0;
} if(i <= j)
{
tem = a;
a = a;
a = tem;
i++;//有啥用啊
j--;//这两行
} leftright 的值是咋弄的,没定义,直接是按数组里元素的个数算的吗 {:10_256:} 看看 #include<stdio.h>
void quick_sort(int s[], int l, int r)
{
if (l < r)
{
//x作为工具值,最左边的第一个值有坑位
int i = l, j = r, x = s;
// 根据工具值,区分左右半区,左边小,右边大
while (i < j)
{
//工具值取左, 就从右边开始运算
while (x <= s && i < j)
{
j--;
}
//右边比工具值小才会跳出循环,把这个小的值给左边的坑位
s = s;
while (x >= s && i < j)
{
i++;
}
//左边比工具值大才会跳出循环,把这个大的值给刚刚被挖的右边的坑位
s = s;
}
//中间的坑位,让工具值x填进去
s = x;
//同理
quick_sort(s, l, i - 1);
quick_sort(s, i + 1, r);
}
}
int main()
{
int s[] = { 1,5,7,3,9,8,0,2 };
int length;
length = sizeof(s) / sizeof(s);
quick_sort(s, 0, length - 1);
for (int i = 0; i < length; i++)
{
printf("%-2d", s);
}
printf("\n");
return 0;
} Crazyeye 发表于 2020-5-31 11:30
if(i
就是如果执行if语句里的东西了,i和j就不会移动了之所以要加上i++和j--,因为那两个while语句中有移动的语句,就是两个while都不执行,才会执行if语句,我也是刚懂,可能没说明白。 递归真的对于我这种小白太难了
{:9_221:} 那个if里面的是什么意思
页:
[1]
2