【JAVA基礎】②關於冒泡排序和快速排序

老師一直在強調這兩個排序方法是面試的時候經常會被各大HR要求手寫,想了想還是整理在這兒吧

主要是思想,寫在這兒的都是一些我的個人見解(以從小到大排序爲例)

1、冒泡排序,就是將相鄰的兩個數字比較,較小的往前放

public void sort(int a[])
{
   for(int i=0;i<a.length;i++){
       for(int j=i+1;j<a.length;j++){
           if(a[i]>=a[j]){
               int temp=a[i];
               a[i]=a[j];
               a[j]=temp;
           }
       }
   }
}
其實,交換位置還有一種“文藝”的寫法:

a[i]=a[i]^a[j];
a[j]=a[j]^a[i];
a[i]=a[i]^a[j];
但是實際上,按位相與操作,耗費的時間會比第一種定義一個新變量要多。

2、快速排序,快速排序的思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然後再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸(簡單來說就是方法自己調用自身)進行,以此達到整個數據變成有序序列。

實現思路大體就是:

public void quickSort(int a[],int l,int r){
   if(l<r){
       int i=l,j=r,x=a[i];
       while(i<j){
           while(i<j&&a[j]>x){
              j--;
           }
           a[i]=a[j];
           while(i<j&&a[i]<x){
              i++;
           }
           a[j]=a[i];
       }
       a[i]=x;
       quickSort(a,l,i-1);
       quickSort(a,i+1,r);
   }
}


本來想畫圖的,不過這個機房電腦木有PS,畫圖着實困難,算了,看代碼應該沒有什麼難度,這個代碼已經是我精簡之後的了。

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