• 冒泡排序和快速排序


    1 冒泡排序

    void Bubble(int r[],int n)
    {
         int i,j,temp;
         for(i=0;i<n;i++)
      {
        for(j=0;j<n-i-1;j++)
        if(r[j]>r[j+1])
        {
          temp=r[j];
          r[j]=r[j+1];
           r[j+1]=temp;
        }
      }
    }

    改进后的算法

    void Bubble(int r[],int n)
    {
         int i=n-1,pos;
        while(i>0)
      {  
        pos=0;
        for(j=0;j<i;j++)
        {
          if(r[j]>r[j+1])       {         pos=j;         temp=r[j];         r[j]=r[j+1];          r[j+1]=temp;
          }     } i
    =pos;   } }

    改进算法避免了在排序中对上次已经得知顺序后,下次比较时还需要再比较的问题

    2 快速比较

    void print(int a[], int n){  
        for(int j= 0; j<n; j++){  
            cout<<a[j] <<"  ";  
        }  
        cout<<endl;  
    }  
      
    void swap(int *a, int *b)  
    {  
        int tmp = *a;  
        *a = *b;  
        *b = tmp;  
    }  
      
    int partition(int a[], int low, int high)  
    {  
        int privotKey = a[low];                             //基准元素  
        while(low < high){                                   //从表的两端交替地向中间扫描  
            while(low < high  && a[high] >= privotKey) --high;  //从high 所指位置向前搜索,至多到low+1 位置。将比基准元素小的交换到低端  
            swap(&a[low], &a[high]);  
            while(low < high  && a[low] <= privotKey ) ++low;  
            swap(&a[low], &a[high]);  
        }  
        print(a,10);  
        return low;  
    }  
      
      
    void quickSort(int a[], int low, int high){  
        if(low < high){  
            int privotLoc = partition(a,  low,  high);  //将表一分为二  
            quickSort(a,  low,  privotLoc -1);          //递归对低子表递归排序  
            quickSort(a,   privotLoc + 1, high);        //递归对高子表递归排序  
        }  
    }  
      
    int main(){  
        int a[10] = {3,1,5,7,2,4,9,6,10,8};  
        cout<<"初始值:";  
        print(a,10);  
        quickSort(a,0,9);  
        cout<<"结果:";  
        print(a,10);  
      
    }  
  • 相关阅读:
    c++笔试题3
    C++笔试题
    C++编程指南续(10-11)
    C++详解(8-9)
    C++编程指南(6-7)
    C++编程指南续(4-5)
    C++编程指南续
    C++的编程指南
    HPSocket介绍与使用
    WinForm中TreeView控件实现鼠标拖动节点(可实现同级节点位置互换,或拖到目标子节点)
  • 原文地址:https://www.cnblogs.com/dongzhuangdian/p/5089916.html
Copyright © 2020-2023  润新知