数组常见常用的几种排序→→→冒泡→→选择→→插入
大家都知道数组的排序有很多种究竟哪种排序比较好呢? 究竟哪种排序的速度更快呢?
我做最近做了一个小小的测试分享给大家!!!!
总结:
- 插入排序效率高 费内存
- 选择排序速度比冒泡快
- Arrays.sort 的速度比选择排序快并且操作简单
View Code
1 package com.zhou.sort; 2 3 import java.lang.reflect.Array; 4 import java.util.ArrayList; 5 import java.util.Arrays; 6 import java.util.Calendar; 7 8 public class Test { 9 10 /** 11 * 冒泡。。。选择。。。。插入 12 */ 13 public static void main(String[] args) { 14 // TODO Auto-generated method stub 15 int len=8; 16 //int a[] = { 2, 6, 9, 7, 5, 3, 1, 4, 8 }; 17 int [] a=new int[len]; 18 for (int i = 0; i < len; i++) { 19 int t=(int) (((Math.random()*100)+1)); 20 a[i]=t; 21 } 22 System.out.print("插入:"); 23 insertSort i= new insertSort(); 24 i.sort(a); 25 26 System.out.print("冒泡:"); 27 Bubble Bubble= new Bubble(); 28 29 //排序前打印系统时间 30 Calendar cal=Calendar.getInstance(); 31 System.out.println(cal.getTime()); 32 Bubble.sort(a);//21秒 33 //排序前打印系统时间 34 cal=Calendar.getInstance(); 35 System.out.println(cal.getTime()); 36 37 38 System.out.print("选择:"); 39 40 Select s = new Select(); 41 cal=Calendar.getInstance(); 42 System.out.println(cal.getTime()); 43 s.sort(a); //10秒 44 //排序前打印系统时间 45 cal=Calendar.getInstance(); 46 System.out.println(cal.getTime()); 47 48 System.out.print("系统:"); 49 cal=Calendar.getInstance(); 50 System.out.println(cal.getTime()); 51 Arrays.sort(a);//速度最快 52 cal=Calendar.getInstance(); 53 System.out.println(cal.getTime()); 54 55 // 输出 56 for (int j = 0; j < a.length; j++) { 57 System.out.print(a[j] + " "); 58 } 59 } 60 61 62 } 63 /* 64 * 插入排序 效率高 费内存 65 */ 66 class insertSort{ 67 public void sort(int a[]) { 68 for (int i = 0; i < a.length; i++) { 69 int insertVal=a[i]; 70 //insertVal准备和前一位数 71 int index=i-1; 72 while(index>=0&&insertVal<a[index]){ 73 //将把a[index]向后移动 74 a[index+1]=a[index]; 75 index--; 76 } 77 //将insertVal插入到适当位子 78 a[index+1]=insertVal; 79 } 80 // 输出 81 for (int j = 0; j < a.length; j++) { 82 System.out.print(a[j] + " "); 83 } 84 } 85 86 } 87 88 class Select { 89 public void sort(int a[]) { 90 /* 91 * 选择排序 速度比冒泡快 92 */ 93 // 外层循环 一共循环的次数 94 for (int i = 0; i < a.length - 1; i++) { 95 // 内层循环 逐个比较 96 for (int j = i + 1; j < a.length; j++) { 97 // 比较 98 if (a[i] > a[j]) { 99 100 int temp = a[i]; 101 a[i] = a[j]; 102 a[j] = temp; 103 } 104 } 105 106 } 107 // 输出 108 /*for (int j = 0; j < a.length; j++) { 109 System.out.print(a[j] + " "); 110 }*/ 111 } 112 } 113 114 115 /* 116 * 冒泡排序 117 */ 118 class Bubble { 119 public void sort(int a[]) { 120 121 // 外层循环 一共循环的次数 122 for (int i = 0; i < a.length - 1; i++) { 123 // 内层循环 逐个比较 124 for (int j = 0; j < a.length - 1 - i; j++) { 125 // 比较 126 if (a[j] > a[j + 1]) { 127 128 int temp = a[j]; 129 a[j] = a[j + 1]; 130 a[j + 1] = temp; 131 } 132 } 133 134 } 135 // 输出 136 /*for (int j = 0; j < a.length; j++) { 137 System.out.print(a[j] + " "); 138 }*/ 139 } 140 141 }
不要让昨天的沮丧 让今天的梦想黯然失色
成功的人总是修改方法而不修改目标
微信公众号:javenlife