java 排序方法

import java.util.Arrays;  
public class Sort {  
     
//冒泡排序(從頭到尾排)  
public static void bubbleSort(int[] arrays)  
{  
  //第一次循環從第一個元素開始,到倒數第二個元素  
  for(int i=0;i<arrays.length-1;i++)  
  {  
   for(int j=1;j<arrays.length-i;j++)  
   {  
    if(arrays[j-1]>arrays[j])  
    {  
     int temp=arrays[j-1];  
     arrays[j-1]=arrays[j];  
     arrays[j]=temp;  
    }  
   }  
  }  
}  
     
//選擇排序  
     
public static void selectSort(int[] arrays)  
{  
  //第一次循環從第一個元素開始,到倒數第二個元素  
  for(int i=0;i<arrays.length-1;i++)  
  {  
   //標識當前的最小元素的位置  
   int ind=i;  
   for(int j=i+1;j<arrays.length;j++)  
   {  
    if(arrays[j]<arrays[ind])  
    {  
     ind=j;  
    }  
   }  
   if(ind!=i)  
   {  
    int temp=arrays[ind];  
    arrays[ind]=arrays[i];  
    arrays[i]=temp;  
   }  
  }  
}  
     
//插入排序  
public static void insertSort(int[] arrays)  
{  
  //第一次循環從第二個元素開始,到最後一個元素  
  //arrays[i]是當前需要插入的元素  
  for(int i=1;i<arrays.length;i++)  
  {  
   //當前已經排好序的數組長度是i  
   int temp=arrays[i];  
   int ind=i;  
   for(int j=i-1;j>=0;j--)  
   {  
    //如果找到了比arrays[j]小的,那麼就將已經排好序的數組的當前位置後的所有元素後移一位,並將需要插入的元素放入該位置j  
    if(temp<arrays[j])  
    {  
     arrays[j+1]=arrays[j];  
     ind=j;  
    }  
    else
    {  
     break;  
    }  
   }  
   arrays[ind]=temp;  
  }  
}  
     
//快速排序  
public static void quickSot(int[] arrays,int left,int right)  
{  
  if(left>=right)  
  {  
   return;  
  }  
  int compInd=left;//選取第一個數作爲比較的基石  
  int i=left;  
  int j=right;  
  while(i<j)  
  {  
  for(;j>=i;j--)  
  {  
   if(arrays[j]<arrays[compInd])  
   {  
    int temp=arrays[j];  
    arrays[j]=arrays[compInd];  
    arrays[compInd]=temp;  
    compInd=j;  
    break;  
   }  
  }  
  for(;i<=j;i++)  
  {  
   if(arrays[i]>arrays[compInd])  
   {  
    int temp=arrays[i];  
    arrays[i]=arrays[compInd];  
    arrays[compInd]=temp;  
    compInd=i;  
    break;  
   }  
  }  
  }  
  quickSot(arrays,left,compInd-1);  
  quickSot(arrays,compInd+1,right);  
}  
     
//歸併排序(兩個有序的數組)  
public static int[] merger(int[] a,int [] b)  
{  
  int[] result=new int[a.length+b.length];  
  int ind=0;  
  int ind1=0;  
  int ind2=0;  
  while(ind1<a.length && ind2<b.length)  
  {  
   if(a[ind1]<b[ind2])  
   {  
    result[ind++]=a[ind1++];  
   }  
   else
   {  
    result[ind++]=b[ind2++];  
   }  
  }  
  while(ind1<a.length)  
  {  
   result[ind++]=a[ind1];  
   ind1++;  
       
  }  
  while(ind2<b.length)  
  {  
   result[ind++]=b[ind2];  
   ind2++;  
  }  
  return result;  
}  
     
//希爾排序  steps爲增量數組,前面的元素大於後面的元素,並且最後一個元素值爲1 ,例如{ 5, 3, 1 }  
public static void shellSort(int[] arrays,int[] steps)  
{  
  for(int step:steps)  
  {  
   for(int i=0;i<step;i++)  
   {  
    for(int j=i;j<arrays.length;j+=step)  
    {  
     //選擇排序  
     int ind=j;  
     for(int k=j+step;k<arrays.length;k+=step)  
     {  
      if(arrays[k]<arrays[ind])  
      {  
       ind=k;  
      }  
     }  
     if(ind!=j)  
     {  
      int temp=arrays[ind];  
      arrays[ind]=arrays[j];  
      arrays[j]=temp;  
     }   
        
    }  
   }  
  }  
}  
     
public static void main(String[] args) {  
  int[] a=new int[]{6,3,13,8,5,10,12,16,4,6};  
//  bubbleSort(a);  
//  selectSort(a);  
//  insertSort(a);  
//  quickSot(a,0,a.length-1);  
  shellSort(a,new int[]{ 5, 3, 1 });  
  System.out.println(Arrays.toString(a));  
}  
     
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章