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排序


      

  • 相关阅读:
    Androi“.NET研究”d 源代码结构 狼人:
    Android UI“.NET研究”之困 横跨四个屏幕的战争 狼人:
    Win7 配“.NET研究”置Android开发环境 狼人:
    微“.NET研究”软“重启”Windows Phone 7 设计的经过 狼人:
    iOS开发库的族“.NET研究”谱介绍 狼人:
    文件匹配常用Linux命令小结
    functionclassAS sin函数小球运动
    持久化框架数据持久化框架(JPA)及其具体实现
    系统工程师Python工程师基础班
    设置虚拟机虚拟机中fedora上网配置bridge连接方式(图解)
  • 原文地址:https://www.cnblogs.com/samualz/p/8515764.html
Copyright © 2011-2022 走看看