• 选择、冒泡、插入、快速排序


    选择排序:每次挑第i小的放第i位。

    int* select(int* a,int n){
      for(int i=0;i<n-1;i++){
        for(int j=i+1;j<n;j++){
          if(a[i]>a[j]){
            int temp=a[i];
            a[i]=a[j];
            a[j]=temp;
          }
        }
      }
      return a;
    }

    冒泡排序:每次挑第i大的放最后第i位(大数后置)。

    int* bubble(int* a,int n){
       for(int i=0;i<n-1;i++){
          for(int j=0;j<n-1-i;j++){
            if(a[j]>a[j+1]){
              int temp=a[j];
              a[j]=a[j+1];
              a[j+1]=temp;
            }
          }
       }
       return a;
    }

    插入排序:打牌。

    int *insert(int* a,int n){
      int *b=new int[n];
      b[0]=a[0];
      for(int i=1;i<n;i++){
         if(a[i]>=b[i-1])
          b[i]=a[i];
        else{
          int m=i-2;
          while((m>=0)&&(a[i]<b[m])){
          m--; //注意考虑m越出左边的情况
          }
          for(int j=i;j>m+1;j--)
            b[j]=b[j-1];
            b[m+1]=a[i];
        }
      }
      return b;
      delete[]b;
    }

    数值交换:

    void swap(int &a,int&b){
      int temp=a;
      a=b;
      b=temp;
    }

    快速排序:左小右大,j记录遇到的小值数,大数交换置前。

    void quick(int *a,int start,int end){
      if(end<=start) return;
      int key=a[start];
      int j=start;
      for(int i=start;i<=end;i++){
        if(a[i]<key){
          ++j;
          swap(a[i],a[j]);
        }
      }

      swap(a[start],a[j]);
      quick(a,start,j-1);
      quick(a,j+1,end);
    }

  • 相关阅读:
    快速排序
    冒泡排序
    选择排序
    合并排序
    插入排序
    跟我一起阅读Java源代码之HashMap(三)
    跟我一起阅读Java源代码之HashMap(二)
    跟我一起阅读Java源代码之HashMap(一)
    Apache2.2 + tomcat7 服务器集群配置
    Spring+Hibernate实现动态SessionFactory切换(改进版)
  • 原文地址:https://www.cnblogs.com/huangshan/p/3386486.html
Copyright © 2020-2023  润新知