排序算法总结

1.冒泡排序法

比较相邻的元素,把最小的排在前面。时间复杂度为O(n^2)

 1 package com.xiao.day01;
 2 
 3 /**
 4  * 冒泡排序法
 5  * 
 6  *
 7  */
 8 public class BubbleSort {
 9 
10     public static void bubbleSort(int[] arr){
11         if(arr == null || arr.length == 0){
12             return ;
13         }
14         for(int i=0; i<arr.length-1; i++){
15             for(int j=arr.length-1; j>i; j--){//从数组的最后一个元素往前比较
16                 if(arr[j] < arr[j-1]){
17                     swap(arr, j-1, j);
18                 }
19             }
20             /*for(int j=0;j<=arr.length-1-i; j++){//从数组的第一个元素向后比较
21                 if(arr[j] > arr[j+1]){
22                     swap(arr, j, j+1);
23                 }
24             }*/
25         }
26     }
27 
28     private static void swap(int[] arr, int i, int j) {
29         int temp = arr[i];
30         arr[i] = arr[j];
31         arr[j] = temp;
32     }
33 }

 2.选择排序

冒泡排序是通过相邻的比较和交换,而选择排序是通过对整体的选择,可能交换的次数少。

 1 package com.xiao.day01;
 2 
 3 public class SelectSort {
 4 
 5     public static void selectSort(int[] arr){
 6         if(arr == null || arr.length == 0){
 7             return ;
 8         }
 9         int minIndex = 0;
10         for(int i=0; i<arr.length-1; i++){
11             minIndex = i;
12             for(int j=i+1; j<arr.length; j++){
13                 if(arr[j] < arr[minIndex]){
14                     minIndex = j;//下标之间的交换
15                 }
16             }
17             if(minIndex != i){
18                 swap(arr, i, minIndex);
19             }
20         }
21     }
22     
23     private static void swap(int[] arr, int i, int j) {
24         int temp = arr[i];
25         arr[i] = arr[j];
26         arr[j] = temp;
27     }
28 }

3.插入排序(参考网址

通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应的位置并插入

4.快速排序

采用“分而治之”,把大的拆分为小的,小的拆分为更小的

对于给定的一组记录,选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分,直到序列中的所有记录均有序为止。

 1 /**
 2  * 快速排序法
 3  *
 4  */
 5 public class QuickSort {
 6 
 7     public static void sort(int[] a , int low, int hight){
 8         int i, j, index;
 9         if( low > hight){
10             return ;
11         }
12         i = low;
13         j = hight;
14         index = a[i];//用子表的第一个作为基准
15         while(i < j){//从表的两端交替向中间扫描
16             while(i < j && a[j] >= index){
17                 j--;
18             }
19             if(i < j){
20                 a[i++] = a[j];
21             }
22             while(i < j && a[i] < index){
23                 i++;
24             }
25             if(i < j){
26                 a[j--] = a[i];
27             }
28         }
29         a[i] = index;
30         sort(a, low, i-1);
31         sort(a, i+1, hight);
32     }
33     
34     public static void quickSort(int[] a){
35         sort(a, 0, a.length-1);
36     }
37     
38     public static void main(String[] args) {
39         int a[] = { 49, 38, 65, 97, 76, 13, 27, 49};
40         quickSort(a);
41         System.out.println(Arrays.toString(a));
42     }
43 }
原文地址:https://www.cnblogs.com/xiaozhijing/p/8485048.html