有关数组的几种排序
数组排序:
1 package com.demo.sort; 2 3 import java.util.Date; 4 5 public class Sorts { 6 7 public static void main(String[] args) { 8 // TODO Auto-generated method stub 9 /* 10 * int len=10; int arr[] = new int[len]; for (int i = 0; i < len; i++) { 11 * arr[i]=(int) (Math.random()*10000); } 12 */ 13 14 int arr[] = new int[] { 7, 8, 1, 3, 2, 5, 4, 6 }; 15 16 // Date dt = new Date(); 17 // Long time = dt.getTime();//距离1970年1月1日0点0分0秒的毫秒数 18 // System.out.println(time); 19 20 Sorts sorts = new Sorts(); 21 // sorts.BubbleSort(arr);//冒泡排序 22 // sorts.SelectSort(arr);//选择排序 23 // sorts.insertSort(arr);//插入排序 24 sorts.quickSort(0, arr.length - 1, arr);// 快速排序 25 26 // System.out.println(System.currentTimeMillis());// 27 // 距离1970年1月1日0点0分0秒的毫秒数 28 29 for (int i = 0; i < arr.length; i++) { 30 System.out.print(arr[i] + " "); 31 } 32 33 } 34 35 // 冒泡排序 36 public void BubbleSort(int arr[]) { 37 int temp = 0; 38 // 外层循环决定一共走几趟 39 for (int i = 0; i < arr.length - 1; i++) { 40 // 内层循环,逐个比较 41 // 前一个如果比后一个大则换位 42 for (int j = 0; j < arr.length - 1 - i; j++) { 43 if (arr[j] > arr[j + 1]) { 44 // 换位 45 temp = arr[j]; 46 arr[j] = arr[j + 1]; 47 arr[j + 1] = temp; 48 } 49 } 50 } 51 } 52 53 // 选择排序 54 public void SelectSort(int arr[]) { 55 int temp = 0; 56 int minValue = 0; 57 int index = 0; 58 59 for (int i = 0; i < arr.length - 1; i++) { 60 minValue = arr[i]; 61 index = i; 62 63 // 查找到最小值 64 for (int j = i + 1; j < arr.length; j++) { 65 if (minValue > arr[j]) { 66 minValue = arr[j]; 67 index = j; 68 } 69 } 70 71 // 把最小的值排到第一个 72 temp = arr[i]; 73 arr[i] = minValue; 74 arr[index] = temp; 75 } 76 } 77 78 // 插入排序 79 public void insertSort(int arr[]) { 80 int insertVal; 81 int index; 82 for (int i = 1; i < arr.length; i++) { 83 // 准备和前一个比较的数 84 insertVal = arr[i]; 85 // 前一个数组下标 86 index = i - 1; 87 // 逐一和前面的数比较 88 while (index >= 0 && insertVal < arr[index]) { 89 // 比较的数如果小于前一个数将前一个数往后移 90 arr[index + 1] = arr[index]; 91 // index向前移动 92 index--; 93 } 94 // 插入 95 arr[index + 1] = insertVal; 96 } 97 } 98 99 // 快速排序 100 public void quickSort(int left, int right, int array[]) { 101 int l = left; 102 int r = right; 103 int midVal = array[(left + right) / 2];//找到中间的值 104 int temp = 0; 105 106 //把比中间值大的放到中间值的右边、小的放到中间值的左边 107 while (l < r) { 108 while (array[l] < midVal) { 109 l++; 110 } 111 while (array[r] > midVal) { 112 r--; 113 } 114 115 if (l >= r) { 116 break; 117 } 118 119 temp = array[l]; 120 array[l] = array[r]; 121 array[r] = temp; 122 123 if (array[l] == midVal) { 124 r--; 125 } 126 if (array[r] == midVal) { 127 l++; 128 } 129 } 130 131 if (l == r) { 132 l++; 133 r--; 134 } 135 136 //递归 137 if (left < r) { 138 quickSort(left, r, array); 139 } 140 if (right > l) { 141 quickSort(l, right, array); 142 } 143 } 144 }