基本排序算法的实现

  1 package com.dongbin.sort;
  2 
  3 import java.util.Arrays;
  4 
  5 /**
  6  * 排序
  7  * @author dongbin
  8  *
  9  */
 10 public class AllSort {
 11     
 12     public static void main(String[] args) {
 13         int[] arr = {1,32,43,11,23,45};
 14         MergeSort(arr);
 15         System.out.println(Arrays.toString(arr));
 16     }
 17 
 18     /**
 19      * 冒泡排序
 20      * @param arr
 21      * @return
 22      */
 23     public static int[] BubbleSort(int[] arr){
 24         
 25         for(int i=0;i<arr.length-1;i++){
 26             for(int j=i+1;j<arr.length;j++){
 27                 if(arr[i]>arr[j]){
 28                     int temp = arr[i];
 29                     arr[i] = arr[j];
 30                     arr[j] = temp;
 31                 }
 32             }
 33         }
 34         return arr;
 35     }
 36     
 37     /**
 38      * 选择排序
 39      * @param arr
 40      * @return
 41      */
 42     public static int[] SelectionSort(int[] arr){
 43         
 44         int min;
 45         for(int i=0;i<arr.length-1;i++){
 46             min=i;
 47             for(int j=i+1;j<arr.length;j++){
 48                 if(arr[i]>arr[j]){
 49                     min = j;
 50                 }
 51             }
 52             
 53             if(min!=i){
 54                 int temp = arr[i];
 55                 arr[i] = arr[min];
 56                 arr[min] = temp;
 57             }
 58         }
 59         return arr;
 60     }
 61     
 62     /**
 63      * 插入排序
 64      * @param arr
 65      * @return
 66      */
 67     public static int[] InsertSort(int[] arr){
 68         
 69         for(int i=1;i<arr.length;i++){
 70             int current = arr[i];
 71             int pos = i;
 72             for(int j=i-1;j>=0;j--){
 73                 if(arr[j]>current){
 74                     arr[j+1] = arr[j];
 75                     pos = j;
 76                 }
 77             }
 78             arr[pos]=current;
 79         }
 80         return arr;
 81     }
 82     
 83     /**
 84      * 快速排序
 85      * @param arr
 86      * @return
 87      */
 88     public static int[] QuickSort(int[] arr){
 89         if(arr.length<=1){
 90             System.out.println("传入的数组长度小于或等于1");
 91         }else{
 92             _quickSort(arr, 0, arr.length-1);
 93         }
 94         
 95         return arr;
 96     }
 97     
 98     public static void _quickSort(int[] arr ,int start, int end){
 99         if(start>=end){
100             return;
101         }
102         
103         int i = start,j=end,current = arr[j];
104         boolean flag = false;
105         
106         while(i!=j){
107             if(flag){
108                 if(arr[j]<current){
109                     int temp = arr[j];
110                     arr[j] = arr[i];
111                     arr[i] = temp;
112                     flag = false;
113                 }else j--;
114             }else{
115                 if(arr[i]>current){
116                     int temp = arr[j];
117                     arr[j] = arr[i];
118                     arr[i] = temp;
119                     flag = true;
120                 }else i++;
121             }
122         }
123         
124         _quickSort(arr, start, i-1);//左边
125         _quickSort(arr, j+1, end);//右边
126     } 
127     
128     
129     /**
130      * 归并排序
131      * @param arr
132      * @return
133      */
134     public static int[] MergeSort(int[] arr){
135         _mergeSort(arr, 0, arr.length-1);
136         return arr;
137     }
138     
139     public static void _mergeSort(int[] arr,int left,int right){
140 
141         if (left < right) {
142             int mid = (left + right) / 2;
143             // 划分
144             _mergeSort(arr, left, mid);
145             _mergeSort(arr, mid + 1, right);
146 
147             // 合并
148             _merge(arr, left, mid, right);
149         }
150 
151     }
152     public static void _merge(int[] arr,int left,int mid,int right){
153         
154         int[] newArr = new  int[arr.length];//新数组
155         int center = mid+1;
156         int tmp = left;
157         int pos = left;
158         
159         while(left<=mid&&center<=right){
160             if(arr[left]<=arr[center]){
161                 newArr[pos++]=arr[left++];
162             }else{                
163                 newArr[pos++]=arr[center++];
164             }
165         }
166         
167         while(left<=mid){
168             newArr[pos++]=arr[left++];
169         }
170         
171         while(center<=right){
172             newArr[pos++]=arr[center++];
173         }
174         
175         while(tmp<=right){
176             arr[tmp] = newArr[tmp++];
177         }
178         
179         
180         
181     }
182 }
原文地址:https://www.cnblogs.com/b-dong/p/5907831.html