zoukankan      html  css  js  c++  java
  • 【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;
    }

    //注:本程序的快速排序虽然基本实现功能,但编写凌乱,留待以后改进。

  • 相关阅读:
    Make something people want
    POJ 3662 Telephone Lines (二分+Dijkstra)
    POJ 2010 Moo University
    HDU 6627 2017ACM/ICPC亚洲区域赛沈阳站 Rabbits
    HDU 6625 2017ACM/ICPC亚洲区域赛沈阳站 Little Boxes(高精度整数加法)
    Codeforces 877D Olya and Energy Drinks(BFS+剪枝)
    CodeForces 876B Divisiblity of Differences (数学水题)
    POJ 2139 Six Degrees of Cowvin Bacon (Floyd最短路)
    UESTC 1057 秋实大哥与花 (线段树)
    Linux安装Oh-my-zsh
  • 原文地址:https://www.cnblogs.com/caixu/p/2196213.html
Copyright © 2011-2022 走看看