鱼C论坛

 找回密码
 立即注册
查看: 8946|回复: 22

[扩展阅读] 各种各这样的排序算法:快速排序

[复制链接]
发表于 2016-12-8 17:37:49 | 显示全部楼层 |阅读模式
购买主题 已有 12 人购买  本主题需向作者支付 10 鱼币 才能浏览
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-12-8 19:55:25 | 显示全部楼层
不明觉厉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-9 08:41:23 | 显示全部楼层
我有点看不懂排序到中间的时候那个基准元素是变了吗还是怎样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-27 14:03:28 From FishC Mobile | 显示全部楼层
稳定性是什么意思啊

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-11 14:36:41 | 显示全部楼层
很棒棒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-20 10:03:14 | 显示全部楼层
其它8种排序算法的标题最后都打了一个指针符,唯独这个快速排序算法没有,小甲鱼老师莫非是在暗示我们什么吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2019-2-11 13:34:46 | 显示全部楼层
快速排序是最常用的,必须掌握
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-15 21:53:38 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-2 13:02:46 | 显示全部楼层
谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-12 22:51:16 | 显示全部楼层
麻了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-26 00:09:40 | 显示全部楼层
小甲鱼🐟🐟,快速排序不是应该每一趟将基准移动到最终位置上么,那个7没到最终位置啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[i] < p)
                i++;
                while(a[j] > p)
                j--;
                if(i <= j)
                {
                        tem = a[i];
                        a[i] = a[j];
                        a[j] = 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[0]);
        qick(array,0,len - 1);
        for(i = 0;i < len;i ++)
        {
                printf("%d ",array[i]);
        } 
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 3 反对 0

使用道具 举报

发表于 2020-5-31 11:30:25 | 显示全部楼层
if(i <= j)
                {
                        tem = a[i];
                        a[i] = a[j];
                        a[j] = tem;
                        i++;//有啥用啊
                        j--;//这两行
                }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-27 15:46:25 From FishC Mobile | 显示全部楼层
left  right 的值是咋弄的,没定义,直接是按数组里元素的个数算的吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-4 10:54:57 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-3-11 09:48:10 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[l];
                // 根据工具值,区分左右半区,左边小,右边大
                while (i < j)
                {
                        //工具值取左, 就从右边开始运算
                        while (x <= s[j] && i < j)
                        {
                                j--;
                        }
                        //右边比工具值小才会跳出循环,把这个小的值给左边的坑位
                        s[i] = s[j];
                        while (x >= s[i] && i < j)
                        {
                                i++;
                        }
                        //左边比工具值大才会跳出循环,把这个大的值给刚刚被挖的右边的坑位
                        s[j] = s[i];
                }
                //中间的坑位,让工具值x填进去
                s[i] = 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[0]);
        quick_sort(s, 0, length - 1);
        for (int i = 0; i < length; i++)
        {
                printf("%-2d", s[i]);
        }
        printf("\n");

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-23 22:55:25 | 显示全部楼层

就是如果执行if语句里的东西了,i和j就不会移动了之所以要加上i++和j--,因为那两个while语句中有移动的语句,就是两个while都不执行,才会执行if语句,我也是刚懂,可能没说明白。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-7 21:38:48 | 显示全部楼层
递归真的对于我这种小白太难了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-13 13:01:28 | 显示全部楼层
那个if里面的是什么意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 23:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表