小甲鱼 发表于 2016-12-8 17:37:49

已有 12 人购买  本主题需向作者支付 10 鱼币 才能浏览 购买主题

洪七公 发表于 2016-12-8 19:55:25

不明觉厉

qq783369750 发表于 2017-8-9 08:41:23

我有点看不懂排序到中间的时候那个基准元素是变了吗还是怎样{:10_269:}{:10_245:}

Assistant 发表于 2017-9-27 14:03:28

稳定性是什么意思啊

泡泡北斗星 发表于 2017-11-11 14:36:41

很棒棒{:10_256:}{:10_256:}

他非她 发表于 2018-8-20 10:03:14

其它8种排序算法的标题最后都打了一个指针符,唯独这个快速排序算法没有,小甲鱼老师莫非是在暗示我们什么吗?{:9_241:}

TCY 发表于 2019-2-11 13:34:46

快速排序是最常用的,必须掌握

hjwwwwww 发表于 2019-2-15 21:53:38

{:10_266:}

lsheihei 发表于 2019-9-2 13:02:46

谢谢

Acacia 发表于 2020-2-12 22:51:16

麻了{:10_282:}

学习橙 发表于 2020-2-26 00:09:40

小甲鱼🐟🐟,快速排序不是应该每一趟将基准移动到最终位置上么,那个7没到最终位置啊

Draem 发表于 2020-3-28 10:10:38

#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;
}

Crazyeye 发表于 2020-5-31 11:30:25

if(i <= j)
                {
                        tem = a;
                        a = a;
                        a = tem;
                        i++;//有啥用啊
                        j--;//这两行
                }

YPD 发表于 2020-10-27 15:46:25

leftright 的值是咋弄的,没定义,直接是按数组里元素的个数算的吗

小白一 发表于 2021-1-4 10:54:57

{:10_256:}

X的Y 发表于 2021-3-11 09:48:10

看看

仓小吉 发表于 2021-12-11 02:01:49

#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;
}

毛闪闪 发表于 2022-1-23 22:55:25

Crazyeye 发表于 2020-5-31 11:30
if(i

就是如果执行if语句里的东西了,i和j就不会移动了之所以要加上i++和j--,因为那两个while语句中有移动的语句,就是两个while都不执行,才会执行if语句,我也是刚懂,可能没说明白。

3192575523 发表于 2022-3-7 21:38:48

递归真的对于我这种小白太难了
{:9_221:}

空幻 发表于 2022-3-13 13:01:28

那个if里面的是什么意思
页: [1] 2
查看完整版本: 各种各这样的排序算法:快速排序