zoukankan      html  css  js  c++  java
  • 排序算法

    //
    //  main.cpp
    //  1.1排序_冒泡排序
    //
    //  Created by lujunjie on 2016/12/25.
    //  Copyright © 2016年 陆俊杰. All rights reserved.
    //
    
    #include <iostream>
    using namespace std;
    int* bubbleSort(int* A, int n);
    int main(int argc, const char * argv[]) {
        // 升序 操作:
        // 第一轮,从0元素开始与相邻元素对比,大的往后放,直到把最大值放到 len - 1 位置
        // 第二轮,从0开始与相邻元素对比,把最大值放到len - 1 - i 位置
        // ** len - 1; 倒数第二跟最后值对比
        // ** len - 1 - i; 比较过得无需再对比
        int arr[8] = {5,33,66,77,11,44,55,22};
        int len = 8;
        for (int i = 0; i< len - 1; i++) {
            
            for (int j = 0; j< len - 1 - i; j++) {
                
                if (arr[j] > arr[j+1]) {
                    int tmp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = tmp;
                }
            }
        }
        
        for (int i = 0; i< len; i++) {
            cout << arr[i] << " ";
        }
        cout << endl;
        
        return 0;
    }
    //
    //  main.cpp
    //  1.2排序_插入排序
    //
    //  Created by lujunjie on 2016/12/25.
    //  Copyright © 2016年 陆俊杰. All rights reserved.
    //
    
    #include <iostream>
    using namespace std;
    int main(int argc, const char * argv[]) {
        
        int arr[13] = {54,35,48,36,27,12,44,44,8,14,26,17,28};
        int len = 13;
        for (int i = 0; i< len-1; i++) {
            if (arr[i] > arr[i+1]) {
                int index = i;
                int value = arr[i+1];
                while (value < arr[index]) {// 移动位置
                    arr[index + 1] = arr[index];
                    index--;
                    if (index< 0) {// 判断到[0]
                        break;
                    }
                }
                arr[index+1] = value;// 插入原来判断的哪个元素。
            }
        }
        
        for (int i = 0; i< len; i++) {
            std::cout << arr[i] << " ";
        }
        
        return 0;
    }
    //
    //  main.cpp
    //  1.3排序_选择排序
    //
    //  Created by lujunjie on 2016/12/25.
    //  Copyright © 2016年 陆俊杰. All rights reserved.
    //
    
    #include <iostream>
    using namespace std;
    int selectMinKey(int *arr,int from,int to)
    {
        int index = from;
        for (int i = from + 1; i<to; i++) {
            if (arr[index] > arr[i]) {
                index = i;
            }
        }
        return index;
    }
    
    int main(int argc, const char * argv[]) {
       
        int arr[8] = {5,33,66,77,11,44,55,22};
        int len = 8;
        
        
        for (int i = 0; i< len; i++) {
            
            int min = i;
            for (int j = i + 1; j < len; j++) {
                if (arr[min] >  arr[j]) {
                    min = j;
                }
            }
            
            if (min!=i) {
                swap(arr[min], arr[i]);
            }
        }
        for (int i = 0; i< len; i++) {
            cout << arr[i] << " ";
        }
        cout << endl;
        return 0;
    }
    //
    //  main.cpp
    //  1.4排序_快速排序
    //
    //  Created by lujunjie on 2016/12/26.
    //  Copyright © 2016年 陆俊杰. All rights reserved.
    //
    
    #include <iostream>
    // 4 high = [2] low = [2]
    // 2 3 4 5 6 8
    using namespace std;
    int partition(int *pArr,int arrlen,int low,int high)
    {
        // 保存标准值
        int standardVal = pArr[low];
        while (low < high) {
            while (low < high && pArr[high] >= standardVal) {
                high--;
            }
            if (low < high) {
                swap(pArr[low], pArr[high]);
            }
            while (low < high && pArr[low] <= standardVal) {
                low++;
            }
            if (low < high) {
                swap(pArr[low], pArr[high]);
            }
        }
        return low;
    }
    void quickSortImpl(int *pArr,int arrLen,int low,int high)
    {
        if (low < high) {
            // 第一步:找到中间值
            int centerPoint = partition(pArr,arrLen,low,high);
            
            // 第二步:前半部分排序
            quickSortImpl(pArr, arrLen, low, centerPoint-1);
            
            //第三步:后半部分排序
            quickSortImpl(pArr, arrLen, centerPoint+1, high);
            
        }
    }
    
    int main(int argc, const char * argv[]) {
        
        int a[15] = {54,35,48,36,27,12,44,44,8,14,26,17,28,999,11};
        int size = 15;
        quickSortImpl(a, size, 0, size-1);
        for (int i = 0; i < size; i++) {
            std::cout << a[i] << " ";
        }
    
        return 0;
    }
  • 相关阅读:
    Python数据分析与机器学习-Matplot_2
    Python数据分析与机器学习-Matplot_1
    1008. 数组元素循环右移问题 (20)
    Latex小技巧
    执行PowerShell脚本的时候出现"在此系 统上禁止运行脚本"错误
    Linux使用MentoHust联网线上校园网, 回到普通有线网络却连不上?
    Re:uxul
    Linux下nautilus的右键快捷菜单项设置
    从入门到入狱——搭讪技巧
    Latex命令
  • 原文地址:https://www.cnblogs.com/-ljj/p/6387793.html
Copyright © 2011-2022 走看看