排序算法

 1     public static void sort(int[] a,int left,int right) {     //快速排序
 2          if(left < right){
 3              int key = a[left];
 4              int low = left;
 5              int high = right;
 6              while(low < high){
 7                      while(low < high && a[high] > key){
 8                              high--;
 9                      }
10                      
11                      while(low < high && a[low] < key){
12                              low++;
13                      }
14                      
15                      a[low] = a[low]^a[high];
16                      a[high] = a[high]^a[low];
17                      a[low] = a[low]^a[high];                    
18              }
19              a[low] = key;
20              sort(a,left,low-1);
21              sort(a,low+1,right);
22              }
23     }
 1     public static void sort(int[] a) {   //冒泡排序
 2          for(int i=0;i<a.length;i++) {
 3              for(int j=0;j<a.length-1;j++) {
 4                  if(a[j]>a[j+1]) {
 5                      a[j] = a[j]^a[j+1];
 6                      a[j+1] = a[j+1]^a[j];
 7                      a[j] = a[j]^a[j+1];
 8                  }
 9              }
10          }
11     }
 1     public static void sort(int[] a) {    //选择排序
 2     
 3         for(int i=0;i<a.length;i++) {
 4             int flag = i;
 5             for(int j=i;j<a.length-1;j++) {                
 6                 if(a[j+1]<a[flag]) {
 7                     flag = j+1;
 8                 }
 9             }
10             if(flag!=i) {
11             a[i] = a[i]^a[flag];
12             a[flag] = a[flag]^a[i];
13             a[i] = a[i]^a[flag];
14             }
15         }
16     }
 1     public static void sort(int[] a) {  //插入排序
 2         int flag,j;
 3         for(int i=1;i<a.length;i++) {
 4             flag = a[i];
 5             for(j=i-1;j>=0 && flag<a[j];j--) {
 6                 a[j+1] = a[j];
 7             }
 8             a[j+1] = flag;
 9         }
10     }
 1     public static int[] sort(int[] a, int low, int high) {    //归并排序
 2         int mid = (low + high) / 2;  
 3         if (low < high) {  
 4             // 左 
 5             sort(a, low, mid);  
 6             // 右
 7             sort(a, mid + 1, high);  
 8             // 合并
 9             merge(a, low, mid, high);  
10         }  
11         return a;  
12     } 
13      public static void merge(int[] a, int low, int mid, int high) {  
14             int[] flag = new int[high - low + 1];  
15             int i = low;
16             int j = mid + 1;
17             int k = 0;  
18       
19             
20             while (i <= mid && j <= high) {  
21                 if (a[i] < a[j]) {  
22                     flag[k++] = a[i++];  
23                 } else {  
24                     flag[k++] = a[j++];  
25                 }  
26             }  
27       
28            //剩余
29             while (i <= mid) {  
30                 flag[k++] = a[i++];  
31             }  
32       
33             //剩余
34             while (j <= high) {  
35                 flag[k++] = a[j++];  
36             }  
37       
38             
39             for (int k2 = 0; k2 < flag.length; k2++) {  
40                 a[k2 + low] = flag[k2];  
41             }  
42         }  
原文地址:https://www.cnblogs.com/yzdd/p/5833193.html