首页 > 编程语言 >递归与分治法实现快速排序算法

递归与分治法实现快速排序算法

时间:2022-10-16 19:01:39浏览次数:51  
标签:递归 int 分治 ++ 排序 快速

​本人CSDN链接:http://t.csdn.cn/Wt0Nm

提示:首先了解并明白递归与分治法的快速排序

文章目录

 


前言

递归与分治法实现快速排序算法,输入一串以英文字符逗号隔开的数字,按升序排列法实现快速排序算法。


 

一、快速排序是什么?

详细了解可参考这位博主:http://t.csdn.cn/C6lHI

(人)做题:数据 5,2,8,4,6,9,10,1,3,7快速排序

1.进行第一次分割快速排序(详细过程)(快速排序默认左小右大)

1.1 以最左端数字为关键字 “5”为关键字。

把5的位置空出来,先从右到左比较数字与5的大小,即从7开始;因7>5而7在右边,所以不动;再3<5,所以把3放到原5空的位置上并空出自己的位置。

 1.2 再从左到右和5进行比较,从2开始;因2<5,2在左故不动;再8>5,8移到空位上。

 1.3 再从右到左进行比较,从1开始;因1<5,移到空位上 。


 1.4 再从左到右进行比较,从4开始;因4<5,不动;因6>5,移到空位上。

 1.5 再从右到左进行比较,从10开始;因10>5,9>5,都不动;都移动完毕,故把5填入空位上。

 2.进行第二、三次分割快速排序(略)

3. 完整快速排序

 

 

​编辑

 

二、代码实现

1.完整代码

代码如下:

#define _CRT_SECURE_NO_WARNINGS//宏定义,防止一些函数调用出错。比如:防止scanf调用的报错
#include<iostream>

using namespace std;

void quickSort(int a[], int, int);//原型声明
int main()
{
    int array[100] = { 0 }, k, i = 0, len = 0;//初始化
    char c;
    for (int j = 0; j < 3; j++) 
    {
        cout << "请输入要排序的数据:" << endl;
        do 
        {
            
            cin >> array[i];
            i++, len++;
            c = getchar();
        } while (c != '\n');


        cout << "输入之后的数组:"<< endl;
        for (k = 0; k < len; k++)
            cout << array[k] << " ";
        cout << endl;

        quickSort(array, 0, len - 1);
        cout << "升序排列法实现快速排序后:" << endl;
        for (k = 0; k < len; k++)
            cout << array[k] << " ";//打印数组
        cout << endl;
    }
    system("pause");
    return 0;
}

void quickSort(int s[], int m, int n) //m为数组(最)左端的下标,n为数组(最)右端的代码
{
    if (m < n)//保证数组中有数据
    {
        int i = m, j = n, x = s[m];
        while (i < j) {
            while (i < j && s[j] >= x) // 从右向左找第一个小于x的数
                j--;
            if (i < j)
                s[i++] = s[j];
            while (i < j && s[i] < x) // 从左向右找第一个大于等于x的数
                i++;
            if (i < j)
                s[j--] = s[i];
        }
        s[i] = x;
        quickSort(s, m, i - 1); // 递归调用
        quickSort(s, i + 1, n);
    }
}


2.运行结果

 

​编辑


 

总结

主要是要了解明白递归快速排序,然后进行代码的缝合编写。请耐心!!!

标签:递归,int,分治,++,排序,快速
From: https://www.cnblogs.com/guang123/p/16796790.html

相关文章

  • python 时间排序
    print('---------------------------------时间排序--------------------------------')'''前提:一天内时间升序思路:将时间转换为最小单位s秒计和,最后比较输入'''#将时间依......
  • 层序遍历递归删除二叉树
    层序遍历递归删除二叉树什么是递归删除?从叶节点开始向根节点的方向逐层删除。直观的讲,对于以下二叉树,递归删除的次序为:f->g->h->i->d->e->b->c->a递......
  • acwing 785.快速排序
    这道题闫总的模版和讨论区第一个可以看一下啊,然后讨论区第一个当时有一个问题,答主是这么回复我的.记录一下:问doi++;while(q[i]<x);会使得q[l..i-1]<=x,q......
  • 递归与排列组合问题
    指数型枚举#include<iostream>usingnamespacestd;intn,num[15];voidprint(intcnt){cout<<num[1];for(inti=2;i<=cnt;i++){co......
  • 十大经典排序算法复习
    十大经典排序算法复习转载文章:https://mp.weixin.qq.com/s/2_G89v9PR7g9O7U4cOdnKg10种经典排序算法:冒泡排序、选择排序、快速排序、归并排序、堆排序、插入排序、希尔......
  • 排序算法
    内部排序:稳定排序(冒泡、插入、归并):重复的元素一定按原始顺序排列非稳定排序(选择、快排)外部排序:多路归并排序#include<stdio.h>#include<stdlib.h>#include<......
  • 【LeetCode-769. medium】最多能完成排序的块
    ​​力扣​​ 解题报告:注意这种【根据一个要求,将数组分成多个区间】类模型的问题(比如汽车加油站、加法表达式求和),套路就这三步:1、初始化2、for循环或者while,里面三步  ......
  • 比较排序算法概述
    文章目录​​排序​​​​ref​​​​排序的对象​​​​排序分类​​​​排序算法的稳定性SortAlgorithmStability​​​​性能分析​​​​比较排序算法的性能分析原则​......
  • 力扣-148-排序链表
    采用归并排序对链表进行排序可以达到O(nlogn)的时间复杂度使用自底向上的迭代写法可以将空间复杂度从O(N)降低到O(1)但是官方的写法对我来说实在是太难以理解了,尝试了......
  • 快速排序
    voidquick_sort(intq[],intl,intr){if(l>=r)return;inti=l-1,j=r+1,x=q[l+r>>1];while(i<j){doi++;w......