老師一直在強調這兩個排序方法是面試的時候經常會被各大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,畫圖着實困難,算了,看代碼應該沒有什麼難度,這個代碼已經是我精簡之後的了。