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;
    }
    
    //注:本程序的快速排序虽然基本实现功能,但编写凌乱,留待以后改进
  • 相关阅读:
    Advanced Configuration Tricks
    Reviewing the Blog Module
    Editing and Deleting Data
    Making Use of Forms and Fieldsets
    Understanding the Router
    SQL Abstraction and Object Hydration
    Preparing for Different Databases
    Java学习理解路线图
    Openstack学习历程_1_视频
    CentOS安装Nginx负载
  • 原文地址:https://www.cnblogs.com/wc1903036673/p/3499634.html
Copyright © 2011-2022 走看看