排序算法

排序算法


 

一.概述

排序算法应该是很多人学习算法的第一课。

二.排序算法的分类及各排序算法的时间空间复杂度

  1. 简单排序算法:选择排序、冒泡排序、插入排序
  2. 插入的进阶版:希尔排序
  3. 二叉树相关: 堆排序
  4. 递归相关:  归并排序、快速排序
  5. 桶思想:      计数排序、基数排序、桶排序
  6. 其他

  -> 重点关注4种:插入排序、堆排序、归并排序和快速排序

  -> 各排序算法的时间空间复杂度

    

 中文名称  英文名称  平均时间复杂度  最坏时间复杂度  最好时间复杂度  空间复杂度  稳定性
 选择排序  Selection  n2  n2  n2  1 N
 冒泡排序  Bubble n2  n2  n  1 Y
 插入排序  Insertion  n2  n2  n   1  Y
 堆排序  Heap nlog2  nlog2 n  nlog2 n  1 N
 希尔排序  Shell n1.3   n2  n   1  N
 归并排序  Merge  nlog2 n  nlog2 n  nlog2 n  n Y
 快速排序  Quick nlog2 n   n2  nlog2 n  log2 n N
 计数排序  Counting n + k   n + k  n + k  n + k  Y
 基数排序  Radix n * k   n * k n * k    n + k   Y
 桶排序  Bucket n + k  n2   n   n + k   Y

 

三.示例

  1. 选择排序 

  2. 冒泡排序
     1 public void sort(int[] arr) {
     2     for (int i = arr.length - 1; i > 0; i--) {
     3         for (int j = 0; j < i; j++) {
     4             if(arr[j] > arr[j+1]){
     5                 swap(arr, j, j+1);
     6             }
     7         }
     8     }
     9 }
    10 
    11 /** 优化最好情况时间复杂度为 N */
    12 public void optimized(int[] arr){
    13     boolean isOk;
    14     for (int i = arr.length - 1; i > 0; i--) {
    15         isOk = true;
    16         for (int j = 0; j < i; j++) {
    17             if(arr[j] > arr[j+1]){
    18                 swap(arr, j, j+1);
    19                 isOk = false;
    20             }
    21         }
    22         if(isOk) break;
    23     }
    24 }
    View Code
  3. 插入排序
  4. 希尔排序
  5. 计数排序
  6. 基数排序
  7. 归并排序
  8. 快速排序

 


 

posted @ 2020-08-14 15:39  一只小鲤鱼  阅读(38)  评论(0)    收藏  举报