java实现的3种排序方式,包括冒泡、选择、插入

1.冒牌排序

 

 1 /***
 2      * 冒泡排序
 3      * 一侧始终有序
 4      * 两两比较,将较大的一直后移
 5      */
 6     public static void bubbleSort(){
 7         int arr[] = {12,3,3,3,8,8,8,9,6,3,5,82,5,2,556,2,45,2,1};
 8         for(int i=arr.length;i>1;i--){//这里i>1,为什么不是0  假如只有3个数a.b.c排序,a与bc比较,b与c比较,最后一个数无需比较
 9             //外城循环负责遍历每一个位置
10             for(int j=0;j<i-1;j++){
11                 //内层循环负责将该位置与其他未排序的位置比较
12                 if(arr[j]>arr[j+1]){
13                     //符合当前位置大于后一个位置的元素,交换位置
14                     int temp = arr[j];
15                     arr[j] = arr[j+1];
16                     arr[j+1] = temp;
17                 }
18             }
19         }
20         for(int i=0;i<arr.length;i++){
21             System.out.print(arr[i]+",");
22         }
23     }

2.选择排序

/***
	 * 选择排序
	 * 与冒泡排序不同的地方在于,比较完成后不会立即移动,会记录最大元素的角标,一轮计较结束后才会向后移动.
	 * 因为移动次数少于比较次数所以效率会比冒泡排序要好
	 */
	public static void selectSort(){
		int arr[] = {12,3,3,3,8,8,8,9,6,3,5,82,5,2,556,2,45,2,0};
		int min;
		for(int i=0;i<arr.length;i++){//从左侧开始查找,默认最左侧是
			min = i;//默认当前是最小值,找到最小值时替换该值
			for(int j=i;j<arr.length;j++){//
				if(arr[j]<arr[min]){//找到最小值时排序
					min=j;
				}
			}
			int temp = arr[min];
			arr[min] = arr[i];
			arr[i] = temp;
		}
		for(int i=0;i<arr.length;i++){
			System.out.print(arr[i]+",");
		}
	}

  3.插入排序

 1 /***
 2      * 插入排序
 3      * 默认一侧 总是有序的
 4      * 在完全逆序的情况下,排序效率很慢
 5      * 在基本有序的集合中排序效率很高
 6      */
 7     public static void insertSort(){
 8         int arr[] = {12,3,3,3,8,8,8,9,6,3,5,82,5,2,556,2,45,2,0};
 9         int in,temp;
10         for(int i=1;i<arr.length;i++){
11             in = i;
12             temp = arr[i];//设置临时变量原因:while开始第一次循环时in=i;arr[in]=arr[i],arr[in]变化,arr[i]也会随之变化.
13             while(in>0 && arr[in-1]>temp){//存在比要插入的元素大的元素存在时,后移
14                 arr[in]=arr[in-1];
15                 in--;
16             }
17             arr[in] =temp;
18         }
19         for(int i=0;i<arr.length;i++){
20             System.out.print(arr[i]+",");
21         }
22     }

 总的来说,正常情况下冒泡算法效率最低,选择排序因为交换次数较少效率总体比冒泡排序高,插入排序可以比冒泡排序快一倍(正常情况下),比选择排序稍快。

 

posted @ 2017-05-16 16:18  kongbin  阅读(205)  评论(0)    收藏  举报