您的位置:首页 > 编程语言 > Java开发

java中的八种排序

2016-05-12 19:20 561 查看
1.冒泡排序

public static int[] bubbleSort1(int[] array){

   for (int i = 0; i < array.length-1; i++) {

    for (int j = 0; j < array.length-1; j++) {

     if (array[j]>array[j+1]) {

      array[j]=array[j]^array[j+1];

      array[j+1]=array[j+1]^array[j];

      array[j]=array[j]^array[j+1];  

     }

    }

    System.out.println(Arrays.toString(array));

   }

   return array;

  }

2.选择排序

public static int[] selectionSort(int[] array){

  int mindex = 0;

  boolean isHave = false;

  for (int i = 0; i < array.length - 1; i++) {

   for (int j = i + 1; j < array.length; j++) {

    if (array[j] < array[mindex]) {

     mindex = j;

     isHave = true;

    }

   }

   if (isHave) {

    array[i] = array[i]^array[mindex];

    array[mindex] = array[mindex]^array[i];

    array[i] = array[i]^array[mindex];

  }if (i <= array.length-2) {

    mindex = i + 1;

   }

   isHave = false;

   System.out.println(Arrays.toString(array));

  }

  return array;

  }

3.归并排序

public static void mergeSort(int[] array){

  

  //前一个有序组合

  ArrayList<Integer> list01=new ArrayList<>();

  //后一个有序组合

  ArrayList<Integer> list02=new ArrayList<>();

  //两个有序组合合并的结果

  ArrayList<Integer> list03=new ArrayList<>();

  

  

 for(int gap=1;gap<array.length;gap=gap*2){

  

  for(int i=0;i<array.length;i++){

   

   if(list01.size()<gap){

    

    list01.add(array[i]);

    

   }else

            if(list02.size()<gap){

    

    list02.add(array[i]);

    

   }

   

   if( (list01.size()==gap && list02.size()==gap) ||  (list01.size()==gap && list02.size()<gap && i==array.length-1)  ){

    //排序

    switchArray(list01,list02,list03);

    list01.clear();

    list02.clear();

   }

   

  }

  

  

  for(int j=0;j<list03.size();j++){

   array[j]=list03.get(j);

  }

  list01.clear();

  list02.clear();

  list03.clear();

  System.out.println(Arrays.toString(array));

   }

  

 }

4.基数排序

public static void radixSort(int[] array) {

  

  int index=0;

  for(int i=0;i<array.length;i++){

   int length=String.valueOf(array[i]).length();

   if(length>index){

    index=length;

   }

  }

  

  System.out.println(index);

  //也可通过先找到最大值,最后转成string获取长度的方法

  /*List<Integer> list=new ArrayList<Integer>();

  List<Integer> list2=new ArrayList<Integer>();*/

  List<ArrayList<Integer>> list=new ArrayList<ArrayList<Integer>>();

  for(int i=0;i<10;i++){

   list.add(new ArrayList<Integer>());

  }

  

  //按照各个位数进行排序

  for(int i = 0;i < index;i++){

   

   for(int m=0;m<array.length;m++){

    

    int a=array[m]/pow(i);

    int b = a % 10;

    

    list.get(b).add(array[m]);

    

    

   }

   

   System.out.println(list);

   

   // 排序

   

   int n=0;

   

   for(ArrayList<Integer> arrayList : list){

    

    

    if(arrayList.size() != 0){

     

     for(Integer inner : arrayList){

      

      array
=inner.intValue();

      n++;

     }

     

     arrayList.clear();

    }

    

    

   }

   

   

   System.out.println("--------"+Arrays.toString(array));

  }

  

  System.out.println(Arrays.toString(array));

  

 }

4.堆排序

public static void switchArray(ArrayList<Integer> list1,ArrayList<Integer> list2,ArrayList<Integer> list3){

  

  //System.out.println("list1");

  int m=0;

  int n=0;

  

  while(m<list1.size() && n<list2.size()){

   

   while(m<list1.size() && n<list2.size() && list1.get(m) < list2.get(n)){

    //System.out.println("m==="+m);

    list3.add(list1.get(m));

    m++;

   }

   

   while(n<list2.size() && m<list1.size() && list1.get(m) >= list2.get(n)){

    //System.out.println("n==="+n);

    list3.add(list2.get(n));

    n++;

    

   }

  }

  

  

  while(m<list1.size()){

   list3.add(list1.get(m));

   m++;

  }

  

  while(n<list2.size()){

   list3.add(list2.get(n));

   n++;

  }

  

  

 }

6.快速排序

 public static void quickfastSort(int[] array){

  

  if(array.length > 0){

   fastSort(array,0,array.length-1);

  }

 }

 

 public static void fastSort(int[] array,int low ,int high ){

  

  if(low < high){

   int middle=findMiddle2(array,low,high);

   fastSort(array, low, middle-1);

   fastSort(array, middle+1, high);

  }

  

 }

public static int findMiddle(int[] array,int low ,int high){

  

  int temp=array[low];

  

  while(low<high){

   

   while(low<high && temp<array[high]){

    high--;

   }

   array[low]=array[high];

   

   System.out.println("=--------"+Arrays.toString(array)+",low="+low+",high="+high);

   while( low<high &&  temp>array[low]){

    low++;

   }

   array[high]=array[low];

   

   System.out.println("=+++++++++"+Arrays.toString(array)+",low="+low+",high="+high);

  }

  array[low]=temp;

  

  System.out.println(Arrays.toString(array)+",low="+low+",high="+high);

  System.out.println("loc="+low);

  return low;

  

 }

 

public static int findMiddle2(int[] array,int low ,int high){

  

  int temp=array[low];

  

  while(low<high){

   

   while(temp<array[high]){

    high--;

   }

   if(low<high){

    array[low]^=array[high];

    array[high]^=array[low];

    array[low]^=array[high];

   }

   

   

   System.out.println("=--------"+Arrays.toString(array)+",low="+low+",high="+high);

   while(temp>array[low]){

    low++;

   }

   

   if(low<high){

    array[high]^=array[low];

    array[low]^=array[high];

    array[high]^=array[low];

   }

   

   System.out.println("=+++++++++"+Arrays.toString(array)+",low="+low+",high="+high);

  }

  

  System.out.println(Arrays.toString(array)+",low="+low+",high="+high);

  System.out.println("loc="+low);

  return low;

  

 }

7.插入排序

public static void insertSort(int[] array){

  

   int j=0;

  

   for(int i=1;i<array.length;i++){

   

    int temp=array[i];

    j=i-1;

    while(j>=0 && temp<array[j]){

    

     array[j+1]=array[j];

     j--;

    }

    array[j+1] = temp;

    System.out.println("---------"+Arrays.toString(array));

   }

  

   System.out.println(Arrays.toString(array));

  }

8.希尔排序

public static void shellSort(int[] array){

  

   int length=array.length;

   int d=length/2;

   while(d>=1){

   

    int j=0;

   

    for(int i=d; i<array.length; i++){

    

     int temp=array[i];

     j=i-d;

     while(j>=0 && temp<array[j]){

     

      array[j+d]=array[j];

      j=j-d;

     }

     array[j+d] = temp;

     System.out.println("---------"+Arrays.toString(array));

    }

   

   

    d=d/2;

   }

  

  }

}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息