1 package com.sort.test; 2 3 import java.util.Arrays; 4 import java.util.Scanner; 5 6 /** 7 * @author MJC 8 *2017年12月20日 9 * 下午7:50:10 10 */ 11 12 13 public class BubbleSort { 14 public static void main(String[] args) { 15 //int[] arr={8, 7, 11, 25,16,5,2,6,54,32,1}; 16 int[] arr={5,3,0,2,6,9,1}; 17 18 int[] result = new int[6]; 19 result=bubbleSorttest(6,arr); 20 System.out.print("冒泡排序========="); 21 for (int i = 0; i < result.length; i++) { 22 System.out.print(result[i]+","); 23 } 24 System.out.println(); 25 result=selectionSort(6,arr); 26 System.out.print("直接选择排序======"); 27 for (int i = 0; i < result.length; i++) { 28 System.out.print(result[i]+","); 29 } 30 31 System.out.println(); 32 result=selectionSort(6,arr); 33 System.out.print("直接选择排序_改进版="); 34 for (int i = 0; i < result.length; i++) { 35 System.out.print(result[i]+","); 36 } 37 38 System.out.println(); 39 result=insertionSort(6,arr); 40 System.out.print("直接插入排序======"); 41 for (int i = 0; i < result.length; i++) { 42 System.out.print(result[i]+","); 43 } 44 System.out.println(); 45 Arrays.sort(arr); 46 System.out.print("Arrays工具类排序=="); 47 for (int i = 0; i < arr.length; i++) { 48 System.out.print(arr[i]+","); 49 } 50 51 52 } 53 /* 54 * 冒泡排序 55 */ 56 public static int[] bubbleSorttest(int n,int[] arr){ 57 58 for(int i=0;i<arr.length;i++){ 59 for(int j=0;j<arr.length-i-1;j++){ 60 if(arr[j]>arr[j+1]){ 61 int temp=arr[j]; 62 arr[j]=arr[j+1]; 63 arr[j+1]=temp; 64 } 65 } 66 } 67 return arr; 68 } 69 70 71 /* 72 * 选择排序 73 */ 74 public static int[] selectionSort(int n,int[] arr){ 75 for(int i=0;i<arr.length;i++){ 76 for(int j=i;j<arr.length;j++){ 77 if(arr[i]>arr[j]){ 78 int temp=arr[i]; 79 arr[i]=arr[j]; 80 arr[j]=temp; 81 } 82 } 83 } 84 return arr; 85 } 86 87 /* 88 * 直接选择排序-改进 89 */ 90 public static int[] selectionSort2(int n,int[] arr){ 91 for(int i=0;i<arr.length;i++){ 92 int minNum=i; 93 for(int j=i;j<arr.length;j++){ 94 if(arr[i]>arr[j]){ 95 minNum=j; 96 } 97 } 98 99 if(minNum!=i){ 100 int temp=arr[i]; 101 arr[i]=arr[minNum]; 102 arr[minNum]=temp; 103 } 104 } 105 return arr; 106 } 107 108 /* 109 * 直接插入排序 110 */ 111 public static int[] insertionSort(int n,int[] arr){ 112 for (int i = 1; i < n; i++) // 类似抓扑克牌排序 113 { 114 //当前正要排序的数 115 int get = arr[i]; // 右手抓到一张扑克牌 116 //已经排好序的数 117 int j = i - 1; // 拿在左手上的牌总是排序好的 118 while (j >= 0 &&arr[j] > get) // 将抓到的牌与手牌从右向左进行比较 119 { 120 arr[j + 1] = arr[j]; // 如果该手牌比抓到的牌大,就将其右移 121 j--; 122 } 123 //不明白为啥没有下面这句也对 124 arr[j + 1] = get; // 直到该手牌比抓到的牌小(或二者相等),将抓到的牌插入到该手牌右边(相等元素的相对次序未变,所以插入排序是稳定的) 125 } 126 return arr; 127 } 128 }