zoukankan      html  css  js  c++  java
  • (1)常见O(n^2)排序算法解析

    一、选择排序

    1、原始数组

    2、遍历数组找到最小值索引,并将最小值索引与当前遍历索引位置互换

    3、确定最小位置值,进行下一次遍历

    4、java代码实现

    /**
    * author:sam
    * date:2018/1/26 14:11
    * describe:选择排序
    */
    public void selectSort(int[] arr){
    for (int i = 0; i < arr.length; i++) {
    int minIndex = i;
    for (int j = i; j < arr.length; j++) {
    if(arr[minIndex] > arr[j])
    minIndex = j;
    }
    SortUtils.swap(arr,minIndex,i);
    }
    }


    二、插入排序

      扑克牌整理牌型时思想,对于有序数组效率非常高。

    1、以[0]位置数据为基点依次遍历后续数据

    2、后续数据依次与当前数据进行比较,并将数据插入到合适位置

    3、进行下依次插入

    4、java代码实现

    /**
    * author:sam
    * date:2018/3/7 10:49
    * describe:插入排序
    */
    @Override
    public void insertSort(int[] arr) {

    for (int i = 1; i < arr.length; i++) {
    for (int j = i; j > 0 && arr[j] < arr[j-1]; j--){
    SortUtils.swap(arr, j, j - 1);
    }
    }
    }

    5、插入排序优化

    /**
    * author:sam
    * date:2018/3/7 12:21
    * describe:插入排序优化
    */
    @Override
    public void optimizeInsertSort(int[] arr) {

    for (int i = 1; i < arr.length; i++) {
    int e = arr[i];
    int index = i;
    for (int j = i; j > 0 && arr[j-1] > e; j--) {
    arr[j] = arr[j - 1];
    index = j - 1;
    }
    arr[index] = e;
    }

    }

     三、冒泡排序

    1、冒泡排序
    /**
    * author:sam
    * date:2018/3/7 14:37
    * describe:冒泡排序
    */
    public void bubbleSort(int[] arr){

    for (int i = 0; i < arr.length; i++) {
    for (int j = 0; j < arr.length - i -1; j++) {
    if(arr[j] > arr[j+1]){
    SortUtils.swap(arr,j,j+1);
    }
    }
    }
    }

    2、冒泡排序优化
    /**
    * author:sam
    * date:2018/3/7 14:49
    * describe:优化冒泡排序
    */
    @Override
    public void optimizeBubbleSort(int[] arr){
    /*boolean flag;
    int n = arr.length;
    do{
    flag = false;
    for (int i = 1; i < n; i++) {
    int j;
    if(arr[i] < arr[j = i-1]) {
    SortUtils.swap(arr, i, j);
    flag = true;
    }
    }
    n--;
    }while(flag);*/
    boolean flag;
    int n = arr.length;
    do{
    flag = false;
    int j;
    for (int i = 0; i < n - 1; i++) {
    if(arr[i] > arr[j = i + 1]){
    SortUtils.swap(arr,i,j);
    flag = true;
    }
    }
    n--;
    }while(flag);
    }

     四、shell排序


      

  • 相关阅读:
    efwplus框架
    注册区域
    社招面试记录与总结
    验证码 Captcha 之大插件
    发生内存泄漏?
    Flume+LOG4J+Kafka
    协议如何保证可靠传输
    oracle之spool详细使用总结(转)
    SSH协议详解(转)
    oracle nologging用法(转)
  • 原文地址:https://www.cnblogs.com/samualz/p/8515764.html
Copyright © 2011-2022 走看看