• 笔记1-排序


    排序算法:

    #include <iostream>
    
    //冒泡排序
    void bubbleSort(int array[],int size){
        
        std::cout << "array= " << array << std::endl;
        
        for (int end = size-1; end > 0; end--) {
            
            for (int begin = 1; begin <= end; begin++) {
                
                if (array[begin] < array[begin-1]) {
                    
                    int tmp = array[begin];
                    
                    array[begin] = array[begin-1];
                    
                    array[begin-1] = tmp;
                    
                }
            }
        }
        
        for(int i = 0; i < size; ++i)
        {
            printf("%d ", array[i]);
        }
    }
    
    //优化1(如果序列已经完全有序,可以提前终止冒泡排序)
    void bubbleSort1(int array[],int size){
        
        std::cout << "array= " << array << std::endl;
        
        for (int end = size-1; end > 0; end--) {
            
            bool sorted = true;
            
            for (int begin = 1; begin <= end; begin++) {
                
                if (array[begin] < array[begin-1]) {
                    
                    int tmp = array[begin];
                    
                    array[begin] = array[begin-1];
                    
                    array[begin-1] = tmp;
                    
                    sorted = false;
                    
                }
            }
            
            if (sorted == true) {
                
                break;
                
            }
        }
        
        for(int i = 0; i < size; ++i)
        {
            printf("%d ", array[i]);
        }
    }
    
    //优化2(如果序列尾部已经局部有序,可以记录最后1次交换的位置,减少比较次数)
    void bubbleSort3(int array[],int size){
        
        std::cout << "array= " << array << std::endl;
        
        for (int end = size-1; end > 0; end--) {
            
            int sortedIndex = 1;
            
            for (int begin = 1; begin <= end; begin++) {
                
                if (array[begin] < array[begin-1]) {
                    
                    int tmp = array[begin];
                    
                    array[begin] = array[begin-1];
                    
                    array[begin-1] = tmp;
                    
                    sortedIndex = begin;
                    
                }
            }
            
            end = sortedIndex;
        }
        
        for(int i = 0; i < size; ++i)
        {
            printf("%d ", array[i]);
        }
    }
    
    //选择排序
    void selectionSort(int array[],int size){
        
        for (int end = size-1; end > 0; end--) {
            
            int maxIndex = 0;
            
            for (int begin = 1; begin <= end; begin++) {
                
                if (array[maxIndex] < array[begin]) {//假定的这个数小于循环扫描的数
                    
                    maxIndex = begin;
                    
                }
            }
            int tmp = array[maxIndex];
            
            array[maxIndex] = array[end];
            
            array[end] = tmp;
            
        }
        
        for(int i = 0; i < size; ++i)
        {
            printf("%d ", array[i]);
        }
    }
    

    相关学习地址:

    https://visualgo.net/zh 图形化算法

    此文仅为鄙人学习笔记之用,朋友你来了,如有不明白或者建议又或者想给我指点一二,请私信我。liuw_flexi@163.com/QQ群:582039935. 我的gitHub: (学习代码都在gitHub) https://github.com/nwgdegitHub/
  • 相关阅读:
    ASCII&Base64
    CentOS自动同步时间
    Java的HashMap
    Java线程同步操作
    Nginx基本配置与应用
    vc中调用Com组件的方法详解
    VC++ try catch (转)
    oracle中exp,imp的使用详解
    jdbc oracle 连接字符串
    标准的开源实现
  • 原文地址:https://www.cnblogs.com/liuw-flexi/p/13491386.html
Copyright © 2020-2023  润新知