• 七大常见排序算法总结(Java语言)


    排序方法平均情况最好情况最坏情况辅助空间稳定性
    冒泡排序 O(n^2) O(n) O(n^2) O(1) 稳定
    简单选择排序 O(n^2) O(n^2) O(n^2) O(1) 稳定
    直接插入排序 O(n^2) O(n) O(n^2) O(1) 稳定
    希尔排序 O(nlogn)~O(n^2) O(n^1.3) O(n^2) O(1) 不稳定
    堆排序 O(nlogn) O(nlogn) O(nlogn) O(1) 不稳定
    归并排序 O(nlogn) O(nlogn) O(nlogn) O(n) 稳定
    快速排序 O(nlogn) O(nlogn) O(n^2) O(logn)~O(n) 不稳定

     事先准备一个库,里面有数据产生方法和交换方法(男票反复强调code style很重要!!!)

    目录结构

    ·Utils

      ·DataPreparationUtil

      ·Swap

    ·Test

     ·BubbleSort

        ·SelectSort

        ·InsertSort

        ·HeapSort

        ·MergeSort

        ·QuickSort

        ·Shellsort

    接下来介绍9个函数的代码

    1.DataPreparationUtil

     1 package Utils;
     2 
     3 import java.util.Random;
     4 import java.util.stream.IntStream;
     5 
     6 public class DataPreparationUtil {
     7 
     8     public static Integer[] PreparationData(int nums,int range) {
     9         Random random = new Random();
    10         return IntStream.rangeClosed(0, nums)
    11                 .boxed()
    12                 .map(index->random.nextInt(range))
    13                 .toArray(Integer[]::new);
    14     }
    15 
    16 }

    2.Swap

    1 package Utils;
    2 
    3 public class Swap {
    4     public static void swap(Integer[] arr,int i,int j) {
    5         int temp = arr[i];
    6         arr[i] = arr[j];
    7         arr[j] = temp;
    8     }
    9 }

    3.BubbleSort

     1 package test;
     2 
     3 import java.util.Arrays;
     4 
     5 import Utils.DataPreparationUtil;
     6 import Utils.Swap;
     7 
     8 public class BubbleSort {
     9 
    10     public static void main(String[] args) {
    11         Integer[] arr = DataPreparationUtil.PreparationData(8, 20);
    12         System.out.println("before sort:" + Arrays.toString(arr));
    13         
    14         for(int i = 0;i < arr.length-1;i++) {
    15             for(int j = 0;j < arr.length-1-i;j++) {
    16                 if(arr[j] > arr[j+1]) {
    17                     Swap.swap(arr, j, j+1);
    18                 }
    19             }
    20         }
    21         System.out.println("after sort:" + Arrays.toString(arr));
    22     }
    23 
    24 }

    4.SelectSort

     1 package test;
     2 
     3 import java.util.Arrays;
     4 
     5 public class SelectSort {
     6 
     7     public static void main(String[] args) {
     8         Integer[] arr = Utils.DataPreparationUtil.PreparationData(8, 20);
     9         System.out.println("before sort:" + Arrays.toString(arr));
    10         
    11         for(int i = 0;i < arr.length-1;i++) {
    12             for(int j = i+1;j < arr.length;j++) {
    13                 if(arr[i] > arr[j]) {
    14                     Utils.Swap.swap(arr, i, j);
    15                 }
    16             }
    17         }
    18         System.out.println("after sort:" + Arrays.toString(arr));
    19     }
    20 
    21 }

    5.InsertSort

     1 package test;
     2 
     3 import java.util.Arrays;
     4 
     5 public class InsertSort {
     6 
     7     public static void main(String[] args) {
     8         Integer[] arr = Utils.DataPreparationUtil.PreparationData(8, 20);
     9         System.out.println("before sort:" + Arrays.toString(arr));
    10         
    11         for(int i = 1;i < arr.length;i++) {
    12             int j = i;
    13             while(j>0 && arr[j] < arr[j-1]) {
    14                 Utils.Swap.swap(arr, j-1, j);
    15                 j--;
    16             }
    17         }
    18         
    19         System.out.println("after sort:" + Arrays.toString(arr));
    20     }
    21 
    22 }

    6.HeapSort

     1 package test;
     2 
     3 import java.util.Arrays;
     4 
     5 public class HeapSort {
     6 
     7     public static void main(String[] args) {
     8         Integer[] arr = Utils.DataPreparationUtil.PreparationData(10, 20);
     9         System.out.println("before sort:" + Arrays.toString(arr));
    10 
    11         sort(arr);
    12         System.out.println("after sort: "+ Arrays.toString(arr) );
    13     }
    14 
    15     private static void sort(Integer[] arr) {
    16 
    17         for(int i=arr.length/2-1;i>=0;i--) {
    18             AdjustHeap(arr,i,arr.length);
    19         }
    20         for(int j=arr.length-1;j>0;j--) {
    21             Utils.Swap.swap(arr, 0,j);
    22             AdjustHeap(arr,0,j);
    23         }
    24     }
    25 
    26     private static void AdjustHeap(Integer[] arr, int i, int length) {
    27         int temp = arr[i];
    28         for(int k=i*2+1;k<length;k=k*2+1) {
    29             if(k+1<length&&arr[k]<arr[k+1]) {
    30                 k++;
    31             }
    32             
    33             if(arr[k]>temp) {
    34                 arr[i]=arr[k];
    35                 i=k;
    36             } else {
    37                 break;
    38             }
    39         }
    40         arr[i] = temp;
    41     }
    42 
    43 }

    7.MergeSort

     1 package test;
     2 
     3 import java.util.Arrays;
     4 
     5 public class MergeSort {
     6 
     7     public static void main(String[] args) {
     8         Integer[] arr = Utils.DataPreparationUtil.PreparationData(8, 20);
     9         System.out.println("before sort: "+ Arrays.toString(arr));
    10         
    11         sort(arr,0,arr.length-1);
    12         System.out.println("after sort: "+ Arrays.toString(arr));
    13 
    14     }
    15     private static void sort(Integer[] arr, int left, int right) {
    16         if(left>=right) return;
    17         int mid = (left+right)/2;
    18         sort(arr,left,mid);
    19         sort(arr,mid+1,right);
    20         merge(arr,left,right);
    21     }
    22     private static void merge(Integer[] arr, int left, int right) {
    23         int mid = (left+right)/2;
    24         int[] temp = new int[arr.length];
    25         int i=left;
    26         int j=mid+1;
    27         int t=0;
    28         
    29         while(i<=mid&&j<=right) {
    30             if(arr[i] < arr[j]) {
    31                 temp[t++]=arr[i++];
    32             } else {
    33                 temp[t++]=arr[j++];
    34             }
    35         }
    36         
    37         while(i<=mid) {
    38             temp[t++]=arr[i++];
    39         }
    40         while(j<=right) {
    41             temp[t++]=arr[j++];
    42         }
    43         
    44         t=0;
    45         while(left<=right) {
    46             arr[left++] = temp[t++];
    47         }
    48     }    
    49 
    50 }

    8.QuickSort

     1 package test;
     2 
     3 import java.util.Arrays;
     4 import java.util.Random;
     5 
     6 public class QuickSort {
     7 
     8     public static void main(String[] args) {
     9         Integer[] arr = Utils.DataPreparationUtil.PreparationData(8, 20);
    10         System.out.println("before sort: " + Arrays.toString(arr));
    11         
    12         sort(arr,0,arr.length-1);
    13         System.out.println("after sort: " + Arrays.toString(arr));
    14     }
    15 
    16     private static void sort(Integer[] arr, int min, int max) {
    17         if(arr==null||min>=max) return;
    18         Random random = new Random();
    19         int pivot = random.nextInt(max) % (max-min+1) + min;
    20         
    21         Utils.Swap.swap(arr, pivot, max);
    22         int temp = min-1;
    23         for (int i = min; i < max; i++) {
    24             if(arr[i] <= arr[max]) {
    25                 temp++;
    26                 Utils.Swap.swap(arr,temp,i);
    27             }
    28         }
    29         temp++;
    30         Utils.Swap.swap(arr, temp, max);
    31         sort(arr,min,temp-1);
    32         sort(arr,temp+1,max);
    33     }
    34 }

    9.Shellsort

     1 package test;
     2 
     3 import java.util.Arrays;
     4 
     5 public class Shellsort {
     6 
     7     public static void main(String[] args) {
     8         Integer[] arr = Utils.DataPreparationUtil.PreparationData(8, 10);
     9         System.out.println("before sort: " + Arrays.toString(arr));
    10         
    11         sort(arr);
    12         System.out.println("after sort: " + Arrays.toString(arr));
    13     }
    14 
    15     private static void sort(Integer[] arr) {
    16         for(int gap=arr.length/2;gap>=1;gap=gap/2) {
    17             for(int i=gap;i<arr.length;i++) {
    18                 int j=i;
    19                 while(j-gap>=0&&j>=0&&arr[j]<arr[j-gap]) {
    20                     Utils.Swap.swap(arr, j-gap, j);
    21                     j-=gap;
    22                 }
    23             }
    24             
    25         }
    26     }
    27 
    28 }
  • 相关阅读:
    在HTML网页中嵌入脚本的方式
    纪念品分组(贪心、排序)
    合并果子(STL优先队列)
    铺地毯(取最上层的地毯)
    多项式方程的输出
    BF算法(蛮力匹配)
    数位的处理
    两个数的差
    多项式计算器
    随机数生成器java实现
  • 原文地址:https://www.cnblogs.com/xiaoyingying/p/7674187.html
Copyright © 2020-2023  润新知