美文网首页
排序算法

排序算法

作者: CoderLiuPu | 来源:发表于2018-09-20 22:15 被阅读5次

排序

定义:
    将一组无序的元素,按照某种方式排列(通常是按照大小或者字母顺序),排序后索引较大的元素大于等于索引较小的元素
PS:
    这里为了方便起见,所有元素都选择数字类型

1. 选择排序

思路:
    首先,找到数组最小的元素,将其与数组的第一个元素交换位置,然后从剩下的元素中找出最小的元素,并与剩下元素的第一个元素(即第二个元素)交换,如此往复,直到整个数组排序完毕

代码实现

/** 选择排序 */
public static void selectSort(int[] arrs) {
   int length = arrs.length;
   for (int i = 0; i < length - 1; i++) {
       int minIndex = i;
       for (int j = i + 1; j < length; j++) {
           if (arrs[j] < arrs[minIndex]) {
               // 将最小元素下标记录
               minIndex = j;
           }
       }
       // 将最小元素与当前剩余元素的第一位交换
       swap(arrs, i, minIndex);
   }
}   

2. 插入排序

思路:
    假设前面的部分是有序的,然后将其余的元素插入之前有序元素的适当位置

代码实现

/**
* 插入排序
*/
public static void insertSort(int[] arrs) {
   int length = arrs.length;
   for (int i = 1; i < length; i++) {
       for (int j = i; j > 0; j--) {
           if (arrs[j] < arrs[j - 1]) {
               swap(arrs, j, j - 1);
           } else {
               break;
           }
       }
   }
}

3. 冒泡排序

思路:
    对比相邻的2个元素,如果顺序错误就交换,然后重复查询直到没有在需要交换的

代码实现

/**
* 冒泡排序
*/
public static void bubbleSort(int[] arrs) {
  int length = arrs.length;
  for (int i = 0; i < length; i++) {
      for (int j = 0; j < length - i - 1; j++) {
          if (arrs[j] > arrs[j + 1]) {
              swap(arrs, j, j + 1);
          }
      }
  }
}

4. 快速排序

思路:
    选定一个基准点,对所有数据进行切分,左右2边分别为比基准点大或小的,循环操作,来达到排序的目的
    
选中一个基数,从两端开始探测,先从右至左,找出一个小于 基数的数,再从左至右找一个大于基数的数,交换,然后递归交换, 交换到最后的时候,将基数与左边数组中最后一位交换即可

代码实现

 /**
     * 快速排序
     */
    public static void quickSort(int[] arrs) {
        quickSort(arrs, 0, arrs.length - 1);

    }

    private static void quickSort(int[] arrs, int l, int r) {
        if (l > r) {
            return;
        }

        int i, j, temp;
        temp = arrs[l];

        i = l;
        j = r;

        while (i != j) {
            while (arrs[j] >= temp && i < j) {
                j--;
            }
            while (arrs[i] <= temp && i < j) {
                i++;
            }
            if (i < j) {
                swap(arrs, i, j);
            }
        }

        arrs[l] = arrs[i];
        arrs[i] = temp;

        quickSort(arrs, l, i-1);
        quickSort(arrs, i+1, r); 
    }

相关文章

  • java实现快速排序、归并排序、希尔排序、基数排序算法...

    快速排序算法 归并排序算法 希尔排序算法 基数排序算法

  • web开发需要知道的几个算法

    算法分类 快速排序算法 深度优先算法 广度优先算法 堆排序算法 归并排序算法

  • 算法学习(1)-排序算法

    八大排序算法九大排序算法再总结[经典排序算法][集锦][直观学习排序算法] 视觉直观感受若干常用排序算法 快速排序...

  • 经典排序算法总结

    经典排序算法集锦 冒泡法 排序算法入门之冒泡排序 排序算法入门之冒泡排序优化

  • 前端算法学习-第一篇

    冒泡排序算法 冒泡排序算法是最慢的排序算法之一,也是最容易实现的排序算法。之所以叫冒泡排序是因为使用这种算法排序时...

  • 七大排序算法之冒泡排序

    七大排序算法之冒泡排序 @(算法笔记)[排序算法, 冒泡排序, C++实现] 冒泡排序介绍 冒泡排序是七大排序算法...

  • 算法-选择排序

    算 法:选择排序算法时间复杂度: 选择排序算法概述 选择排序伪代码 选择排序实现 选择排序算法概述 排序算法有许...

  • 浅谈排序算法

    排序算法有很多种,今天先谈谈一些简单的排序算法。包括桶排序、冒泡排序和快速排序算法。后期总结各种排序算法。 桶排序...

  • 线性排序

    桶排序、计数排序、基数排序 一、线性排序算法介绍 1.线性排序算法包括桶排序、计数排序、基数排序。2.线性排序算法...

  • 算法4:插入排序和选择排序算法的比较

    排序算法列表电梯: 选择排序算法:详见 《算法4》2.1 - 选择排序算法(Selection Sort), Py...

网友评论

      本文标题:排序算法

      本文链接:https://www.haomeiwen.com/subject/yolonftx.html