数据结构算法中的 几种排序方法

package sort;

public class SortAll {

 /*
  * 冒泡排序,选择排序,插入排序,希尔(Shell)排序 Java的实现
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
      int [] i={1, 5, 6, 12, 4, 9, 3, 23, 39, 403, 596, 87 };
      System.out.println("---冒泡排序的结果:");
      maopao(i);
      System.out.println();
      System.out.println("----选择排序的结果:");
   xuanZe(i);
   System.out.println();
   System.out.println("----插入排序的结果:");
  chaRu(i);
   System.out.println();
   System.out.println("----希尔(Shell)排序的结果:");
   shell(i);
 }
 //冒泡排序:最大的元素就被移到了数列的末尾。如此反复这个过程n-1次后,整个数列就排序好了
 public static void maopao(int []x)
 {
  for(int i=0;i < x.length;i++){
    for(int j=i+1;j<x.length;j++){
      if (x[i]>x[j]){
       int temp=x[i];
       x[i]=x[j];
       x[j]=temp;
      }
    }
  }
  for (int i:x){
   System.out.print(i+" ");
  }
 }
 
   //选择排序 :
 /*找到一个极端值后放到数组的头或尾。

    区别就在于选择排序用一个变量来记录找到的最小值,并且找到后只交换一次
 */

   public static void xuanZe(int []y){
   
   for(int i = 0;i <y.length;i++){
    int lowerIndex=i;
    for(int j=i+1;j<y.length;j++){
     if(y[j]<y[lowerIndex]){
      lowerIndex=j;
     }
    }
    //交换
    int temp=y[i];
    y[i]=y[lowerIndex];
    y[lowerIndex]=temp;
   }
   for (int i:y){
   System.out.print(i+" ");
  }
   }
   //插入排序:
  
   public static void chaRu(int []x){
 // i从一开始,因为第一个数已经是排好序的啦
  //通过不断交换来排序
    for(int i=1;i<x.length;i++)
     for(int j=i;j>0;j--){
      if(x[j]< x[j-1]){
       int temp=x[j];
       x[j]=x[j-1];
       x[j-1]=temp;
      }
     }
    for(int i:x){
     System.out.print(i+" ");
    }   
   }
   //希尔排序:分成若干的小组,在组内进行插入排序
   public static void shell(int []x){
    //分组
    for(int increment=x.length/2;increment>0;increment=increment/2){
  //每个组内:
     for(int i=increment;i<x.length;i++){
      int temp=x[i];
      int j=0;
      for(j=i;j>=increment;j-=increment){
       if(temp<x[j-increment]){
        x[j]=x[j-increment];
       }else{
        break;
       }
      }
      x[j]=temp;
     }   
    }
    for(int i:x){
      System.out.print(i+" ");
     }    
   }
}

原文地址:https://www.cnblogs.com/lhxue/p/3014956.html