Java常用排序

  1 /**
  2  * Java常用排序
  3  * @author LiTaiQing
  4  *
  5  */
  6 public class SortTest {
  7     
  8     /*
  9      * 直接插入排序
 10      * 基本思想:
 11      *         在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排好顺序的,
 12      *         现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。
 13      *         如此反复循环,直到全部排好顺序
 14      */
 15     public static void insertSort(int[] arr){
 16         for(int i = 1; i < arr.length; i++){
 17             int j = i -1;
 18             for(;j > 0 && arr[i] < arr[j];j--){
 19                 arr[j+1] = arr[j];
 20             }
 21             arr[j+1] = arr[i];
 22         }
 23     }
 24     
 25     /*
 26      * 简单快速排序
 27      * 基本思想:
 28      *         在要排序的一组数中,选出最小的一个数与第一个位置的数交换;
 29      *         然后在剩下的数当中再找最小的与第二个位置的数交换,
 30      *         如此循环到倒数第二个数和最后一个数比较为止。
 31      */
 32     public static void selectSort(int[] arr){
 33         for(int i = 0; i < arr.length - 1; i++){
 34             for(int j = i + 1;j < arr.length ; j++){
 35                 if(arr[i] > arr[j]){
 36                     arr[i] ^= arr[j];
 37                     arr[j] ^= arr[i];
 38                     arr[i] ^= arr[j];
 39                 }
 40             }
 41         }
 42     }
 43     
 44     /*
 45      * 冒泡排序
 46      * 基本思想:
 47      *         在要排序的一组数中,对当前还未排好序的范围内的全部数,
 48      *         自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。
 49      *         即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。
 50      */
 51     public static void bubbleSort(int[] arr){
 52         for(int i = 0; i < arr.length - 1; i++){
 53             for(int j = 0; j < arr.length - 1 - i; j++){
 54                 if(arr[j] > arr[j+1]){
 55                     arr[j] += arr[j+1];
 56                     arr[j+1] = arr[j] - arr[j+1];
 57                     arr[j] -= arr[j+1];
 58                 }
 59             }
 60         }
 61     }
 62     
 63     /*
 64      * 希尔排序(最小增量排序)
 65      * 基本思想:
 66      *         算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组,
 67      *         每组中记录的下标相差d.对每组中全部元素进行直接插入排序,
 68      *         然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。
 69      *         当增量减到1时,进行直接插入排序后,排序完成。
 70      */
 71     public static void shellSort(int[] arr){
 72         int j = 0;  
 73         int temp = 0;  
 74         for (int increment = arr.length / 2; increment > 0; increment /= 2) {  
 75             for (int i = increment; i < arr.length; i++) {  
 76                 temp = arr[i];  
 77                 for (j = i; j >= increment; j -= increment) {  
 78                     if(temp > arr[j - increment]){  
 79                         arr[j] = arr[j - increment];  
 80                     }else{  
 81                         break;  
 82                     }  
 83                 }   
 84                 arr[j] = temp;  
 85             }  
 86         }  
 87     }
 88     
 89     /*
 90      * 输出
 91      */
 92     public static void out(int[] arr){
 93         System.out.print("[");
 94         for(int i =0; i < arr.length - 2; i++){
 95             System.out.print(arr[i]+",");
 96         }
 97         System.out.println(arr[arr.length-1]+"]");
 98     }
 99     
100 }

 

posted @ 2015-08-28 13:03  登高一呼  阅读(158)  评论(0编辑  收藏  举报