• 【C++】冒泡排序、插入排序、快速排序


    #include<iostream>
    using namespace std;
    void BubbleSort(int *a,int istart,int len)//冒泡排序
    {
        //a为数组,len为数组长度,对a[istart]~a[len-1]进行排序,小浮大沉
        //从后面往前两两比较,小的上浮,直到最顶端a[istart]中存放的是剩余数组中最小的数。
        for(int i=len;i>istart+1;i--)
        {
            if(a[i-2]>a[i-1])
            {
                int temp=a[i-2];
                a[i-2]=a[i-1];
                a[i-1]=temp;
            }
        }
        if(istart<len-1)BubbleSort(a,istart+1,len);
    }
    
    
    void InsertionSort(int *a,int ilast,int len)//插入排序
    {
        //取元素a[ilast+1]插入到a[0]~a[ilast]中,从a[ilast]开始往上一个个比较,如果大小顺序不妥,就对调下它们的数值。
        int i=ilast+1;
        int temp=0;
        while (a[i]<a[i-1])
        {
            temp=a[i-1];
            a[i-1]=a[i];
            a[i]=temp;
            i--;
            if(i<1)break;
        }
        if(ilast<len-2)InsertionSort(a,ilast+1,len);
    }
    
    void QuickSort(int *a,int istart,int ilast)//快速排序
    {    //对数组a中从a[istart]~a[ilast]的所有元素进行排序
        //1.取第一个数a[istart]做基准,则a[istart]就留出了一个空位置,从后往前找,找到最近一个小于基数的数值(a[j])存入前面的空位置a[i]
        //2.从前往后找,找到最近一个大于基数的数值存入a[j],则余出来的空位置又假定为a[i]
        //3.当i超过j(即i>=j时)结束该轮排序
        //4.重复以上步骤
        int BaseNum=a[istart];
        int i=istart,j=ilast;
        int k=0;
        while (1)
        {
            while(a[j]>BaseNum && i<j)j--;
            a[i]=a[j];        
            i++;
            if (i>=j)
            {
                a[j]=BaseNum;
                k=j;
                break;
            }
            while(a[i]<BaseNum && i<j)i++;
            a[j]=a[i];
            if (i>=j)
            {
                a[j]=BaseNum;
                k=j;
                break;
            }    
            j--;
        }
        if(istart<k)QuickSort(a,istart,k);
        if(k+1<ilast)QuickSort(a,k+1,ilast);
    }
    void main()
    {
        int a[]={1,4,8,9,7,2,6,3,5};
        int len=sizeof(a)/sizeof(int);
        //BubbleSort(a,0,len);
        //InsertionSort(a,0,len);
        QuickSort(a,0,len-1);
        for(int i=0;i<len;i++)
        {
            cout<<a[i]<<" ";
        }
        cout<<endl;
    }
    
    //注:本程序的快速排序虽然基本实现功能,但编写凌乱,留待以后改进
  • 相关阅读:
    如何去除照片上的噪点?Topaz DeNoise AI 专业降噪激活版
    3D元素视频特效After Effects 2022中文激活版
    flutter_dating_template
    netcore 使用apollo
    数组浅拷贝和深拷贝
    奇思妙想之 巧记108将
    Spring通过MimeMessageHelper发送邮件,中文附件名出现乱码解决办法
    linux 复制多级目录,删除文件和文件夹,创建文件夹和文件
    nginx 上传文件 到分布式应用
    Linux同步网络时间
  • 原文地址:https://www.cnblogs.com/wc1903036673/p/3499634.html
Copyright © 2020-2023  润新知