zoukankan      html  css  js  c++  java
  • 备战校招——常见排序

    算法简单,但要想写出稳定健壮性好的排序程序还是很有挑战的,尤其是对边界的控制

    直接上干货吧,Resource Code.....:

      1 public class Sort {
      2 
      3     public static void main(String [] argv){
      4         
      5         
      6         int [] source0 = {5,3,7,9,1,2,6,4,8};
      7         int [] source1 = {5,3,7,9,1,2,6,4,8};
      8         int [] source2 = {5,3,7,9,1,2,6,4,8};
      9         int [] source3 = {5,3,7,9,1,2,6,4,8};
     10         //*  快排测试   *//
     11         Sort test = new Sort();            
     12         test.Quick_sort(source0,0,source0.length-1);
     13         System.out.println("Quick sort result:");
     14         for (int k:source0){
     15             System.out.print(" "+k);
     16         }
     17         System.out.println();
     18         
     19         //*  冒泡测试   *//
     20         test.Bubble_sort(source1);
     21         System.out.println("Bubble sort result:");
     22         for (int k:source1){
     23             System.out.print(" "+k);
     24         }
     25         System.out.println();
     26 
     27         //*  归并测试   *//
     28         test.Merge_sort(source2, 0, source2.length-1);
     29         System.out.println("Merge sort result:");
     30         for (int k:source2){
     31             System.out.print(" "+k);
     32         }
     33         System.out.println();
     34         
     35         //*  堆排测试   *//
     36         test.Heap_sort(source3);
     37         System.out.println("Heap sort result:");
     38         for (int k:source3){
     39             System.out.print(" "+k);
     40         }
     41     }
     42     
     43     //*  堆排序   *//
     44     public void Heap_sort(int[] arr){
     45         int [] Result = new int[arr.length];
     46 
     47         for(int i=0; i<arr.length; i++){
     48             Heap_up(Result,i, arr[i]);
     49         }
     50         //System.out.println("............");
     51         for (int i=arr.length; i>=1; i--){
     52             //System.out.print(" "+Result[0]);
     53             Heap_down(Result,i);
     54         }    
     55         for(int i=0; i<arr.length; i++){
     56             arr[i]=Result[arr.length-1-i];
     57             //System.out.println(Result[i]);
     58         }
     59     }
     60     
     61     public void Heap_up(int[] arr,int n, int n_Num){
     62         
     63         arr[n]=n_Num;    
     64         Heap_up_adjust(arr,n);
     65         
     66     }
     67         
     68     public void Heap_up_adjust(int[] arr,int i){
     69         
     70         int j,temp;
     71         j=(i-1)/2;
     72         temp = arr[i];
     73         while(j>=0&&i!=0){
     74             
     75             if(arr[j]<=temp)
     76                 break;
     77             arr[i]=arr[j];
     78             i=j;
     79             j=(i-1)/2;
     80         }
     81         arr[i]=temp;        
     82     }
     83     
     84     public void Heap_down(int[] arr,int n){
     85         
     86         int tmp = arr[0];
     87         arr[0]=arr[n-1];
     88         arr[n-1]=tmp;    
     89         Heap_down_adjust(arr, n);
     90     }
     91     
     92     public void Heap_down_adjust(int[] arr, int n){
     93         
     94         int i=0;
     95         int j = 2*i+1;
     96         int tmp=arr[0];
     97         while(j<n-1){
     98             if (j + 1 < n-1 && arr[j + 1] < arr[j]) 
     99                 j++;
    100             if(arr[j]>=tmp)
    101                 break;
    102             arr[i]=arr[j];            
    103             i=j;
    104             j=2*i+1;
    105         }
    106         arr[i]=tmp;
    107     }
    108     
    109     //*  归并排序 *//
    110     public void Merge_sort(int[] arr, int x, int y){
    111         int mid = (x+y+1)/2;
    112         //System.out.println(mid);
    113         if(mid-1>x) Merge_sort(arr,x,mid-1);
    114         if(y>mid) Merge_sort(arr,mid,y);        
    115         merge(arr,x,mid,y);    
    116     }
    117     public void merge(int[] arr, int s, int m, int t){
    118         int[] tmp = new int[t-s+1];
    119         int i = 0;
    120         int j = s;
    121         int k = m;
    122         while(!(j==m&&k==t+1)){
    123             while(j<m){
    124                 if(k==t+1){
    125                     tmp[i]=arr[j];
    126                     //System.out.println(tmp[i]+" "+arr[j]);
    127                     //System.out.println("temp "+i+" "+tmp[i]+" "+j+" "+arr[j]);
    128                     i++;
    129                     j++;
    130                 
    131                 }
    132                 else{
    133                     if(arr[j]<=arr[k]){
    134                     tmp[i]=arr[j];
    135                     //System.out.println(tmp[i]+" "+arr[j]);
    136                     //System.out.println("temp "+i+" "+tmp[i]+" "+j+" "+arr[j]);
    137                     i++;
    138                     j++;
    139                     }
    140                     else
    141                         break;
    142                 }
    143                     
    144             }
    145             while(k<=t){
    146                 if(j==m){
    147                     tmp[i]=arr[k];
    148                     //System.out.println(tmp[i]+" "+arr[k]);
    149                     //System.out.println("temp "+i+" "+tmp[i]+" "+k+" "+arr[k]);
    150                     i++;
    151                     k++;
    152                 }
    153                 else{
    154                     if(arr[k]<=arr[j]){
    155                     
    156                     tmp[i]=arr[k];
    157                     //System.out.println(tmp[i]+" "+arr[j]);
    158                     //System.out.println("temp "+i+" "+tmp[i]+" "+k+" "+arr[k]);
    159                     i++;
    160                     k++;
    161                     }
    162                     else
    163                         break;
    164                 }
    165                     
    166             }
    167         }    
    168         for(int p=s; p<=t; p++){
    169             arr[p]=tmp[p-s];
    170             //System.out.print(" "+arr[p]);
    171         }
    172     }
    173     
    174     //* 冒泡排序 *//
    175     public void Bubble_sort(int[] arr){
    176         
    177         for(int i=0; i<arr.length-1;i++){
    178             for(int j=0; j<arr.length-1-i;j++){
    179                 //System.out.println("i: "+i+"  j: "+j);
    180                 if(arr[j]>arr[j+1]){
    181                     int temp =arr[j];
    182                     arr[j]=arr[j+1];
    183                     arr[j+1]=temp;
    184                 }
    185             }
    186             
    187         }
    188         
    189     }
    190     
    191     //* 快速排序 *//
    192     public void Quick_sort(int[] arr, int low, int high)
    193     {
    194     int l=low;
    195     int h=high;
    196     int povit=arr[low];
    197 
    198      while(l<h)
    199      {
    200      while(l<h&&arr[h]>=povit)
    201      h--;
    202      if(l<h){
    203      int temp=arr[h];
    204      arr[h]=arr[l];
    205      arr[l]=temp;
    206      l++;
    207      }
    208      
    209      while(l<h&&arr[l]<=povit)
    210      l++;
    211      
    212      if(l<h){
    213      int temp=arr[h];
    214      arr[h]=arr[l];
    215      arr[l]=temp;
    216      h--;
    217      }
    218      }
    219     // System.out.print(arr);
    220     // System.out.print("l="+(l+1)+"h="+(h+1)+"povit="+povit+"
    ");
    221      if(l>low) Quick_sort(arr,low,l-1);
    222      if(h<high) Quick_sort(arr,l+1,high);
    223      }
    224         
    225     
    226 }
  • 相关阅读:
    SpringSecurity 3.2入门(8)自定义权限控制数据库设计
    SpringSecurity 3.2入门(7)自定义权限控制介绍
    SpringSecurity 3.2入门(6)简单介绍默认使用的十一个过滤器
    Spring3.2下使用JavaMailSenderImpl类发送邮件
    Java Mail邮件发送的简单实现
    Spring下配置几种常用连接池
    23种设计模式入门之工厂模式
    C# BackgroundWorker的Bug???
    C# BeginInvoke和EndInvoke方法
    c# 高效的线程安全队列ConcurrentQueue
  • 原文地址:https://www.cnblogs.com/udld/p/4517794.html
Copyright © 2011-2022 走看看