• 2种冒泡排序优化


    直接上代码:

    #define swap(a,b) {a ^= b; b ^= a; a ^= b;}

    void sort(int *arr, int num){
     for(int i = 0; i < num - 1; ++i){
      bool isOk = true;   // 是否排序完毕
      for(int j = 0; j < num - 1 - i; ++j){
       if(arr[j] > arr[j + 1]){
        isOk = false;
        swap(arr[j], arr[j + 1]);
       }
      if(isOk){
       return;
      }
     }
    }

    void test(){
     int arr[5] = {0,2,1,4,5};
     sort(arr, 5);
    }

    思路:冒泡排序,如果排序都已经排完了,就直接退出。

    避免多余排序(不发生交换的时候就排序完毕了);

    每一轮排序完毕之后。最大的数字就已经在最后了,就能够不比較最后一个数字;

    还有一种冒泡排序的写法:

    void sort(int *arr, int num){
    bool flag = true;
    while(flag){
    flag = false;
    for (int j = 0; j < num - 1; ++j){
    if(arr[j] > arr[j + 1]){
    swap(arr[j], arr[j + 1]);
    flag = true;
    }
    }
    }
    }

    思路:与上一种思路一样,不发生交换了就排序完毕了。

  • 相关阅读:
    Java数据结构之栈(Stack)
    Java数据结构之单向环形链表(解决Josephu约瑟夫环问题)
    Java数据结构之双向链表
    zookeeper:JavaApi操作节点
    zookeeper:3
    单例模式
    zookeeper:2
    架构版本
    zookeeper:1
    Java反射
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5390708.html
Copyright © 2020-2023  润新知