部分排序算法總結

1.直接插入排序

public class ChaRu
{
/*
直接插入排序
如果前面已經有若干個記錄排成了有序的序列,則對已排序的元素依次與新元素進行比較。找到合適的位置並插入
*/
 public static void main(String args[])
 {
   int []numbers = {12,34,32,11,5,67,45,77,15};
  System.out.println("-----初始順序-----");
  for(int m : numbers)
     System.out.println(m);
   int j,k;
   int n = numbers.length;
   for(j=1;j<n;j++)
      {
         int temp = numbers[j];
         k = j-1;
         while(k>=0&&temp<numbers[k])
                 {
                numbers[k+1] = numbers[k];
                k--;
                 }   
          numbers[k+1] = temp;
       }
  System.out.println("-----排序後的順序-----");
  for(int s : numbers)
     System.out.println(s);
                                               
                                                
                                              
 }
}

2.選擇排序

public class ZhiJieXuanZe
{
/*
 直接選擇排序
逐個找出第i小的元素,並將其放到數組的第i個位置
*/
 public static void main(String args[])
 {
  int numbers[] = {4,12,11,34,45,67,21,88,32};
  int n = numbers.length;
  for(int j=0;j<n;j++)
  {
     int smallest = j;
     //選出剩餘元素中最小的一個的下標
     for(int k=j+1;k<n;k++)
         if(numbers[k]<numbers[smallest])
           {
             smallest = k;
           }
      int temp =numbers[j];
      numbers[j] = numbers[smallest];
      numbers[smallest] = temp;
                                              
   }
   for(int s : numbers)
      System.out.println(s);
 }
}

}

3.冒泡排序

public class MaoPao
{
/*冒泡排序法
 不停地比較相鄰的元素,如果不滿足排序要求,就交換相鄰元素,直到所有元素都已排好序爲止。
*/
 public static void main(String args[])
  {
   int []numbers = {12,11,5,32,12,56,88,43,56,78,89,4,6,23};
   int n = numbers.length;
   for( int j=0 ;j<n-1;j++)
    {//n-1趟
        //每趟逐次比較相鄰元素,將最大的數放在數組末尾
       for(int k=0;k<n-j-1;k++)
        if(numbers[k]>numbers[k+1])
            {
               int temp = numbers[k];
               numbers[k] = numbers[k+1];
               numbers[k+1]=temp;
            }
    }
   for(int s: numbers)
          System.out.println(s);
 }
}

}

4.快速排序

public class KuaiSu2
{
/*
 快速排序
 將元素分爲若干組,首先選取一個軸,【(0+length-1)/2】位置上的元素
 左右逐步逼近,左邊大於軸值的數替換到右邊
 右邊小於軸值的數替換到左邊。
*/
 public static void FenGe(int left,int right,int []numbers)
{ 
   int l =left;
   int r = right;
   int location = (l+r)/2;
   int mid = numbers[location];
   System.out.println("調用分割");
                                   
      while(l<=r)
{
    while(numbers[l]<mid&&l<right)
        l++;
                                      
     while(numbers[r]>mid&&r>left)
              r--;
    if(l<=r)
     {
     int temp = numbers[l];
     numbers[l] = numbers[r];
     numbers[r] = temp;
     l++;
     r--;
     }
}
     if(l<right)
        FenGe(l,right,numbers);
      if(r>left)
       FenGe(left,r,numbers);
                                        
                                    
}
 public static void main(String args[])
 {
     int numbers[] = {12,34,56,78,32,23,214,54,33,21};  //32爲軸
     int n = numbers.length;
     FenGe(0,n-1,numbers);
                                    
                                 
  for(int s : numbers)
           System.out.println(s);
                                
 }
}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章