快速排序的思想:
1.以陣列為例,將陣列中第乙個數或者最後乙個數為基準數記為 j ,用這個基準數來將陣列分為兩個部分,基準數 j左邊部分都是比j小的數,右邊是比j大的數。
2.再將左邊陣列進行快速排序,右邊也進行快速排序。這就是快速排序最基礎的思想。
3.知道了思想,接下來就是如何將這個陣列該如何以j為基準進行分割?我們可以設乙個陣列int array=;
4.先設基準數 j=7;現在需要兩個變數分別從左和右來標記比基準數大或者小的數的下標,從最左邊開始的設為i=0,最右邊的設為k=array.length-1。當從k的位置開始向左邊尋找,尋找的第乙個比j小的是 0,i++;從i的位置向右邊尋找,找到的第乙個比j大的是10,k–;將這兩個數字進行交換 要滿足k>i這個條件。
則陣列變成了7,6,1,2,0,9,3,4,5,10,8
交換下來i指向4 k指向4:7,6,1,2,0,5,3,4,9,10,8 這時候將數字4再和基準數j進行交換;
交換完成:4,6,1,2,0,5,3,7,9,10,8
然後進行遞迴呼叫將左邊和右邊的數字依照上面的方法排序即可。
以下是** 已測
public
static
void
quicksort(int a,int left,int right)
}//當不能再進行交換的時候 把基準位和i指向的數字交換
int mm=a[i];
a[i]=first;
a[left]=mm;
if(i>left)
quicksort(a,left,i-1);
if(k1,right);
}
演算法學習 第一天 插入演算法
入程式設計師這一行不久,而且是從網路工程師半路轉過來的。聽說不懂演算法的都不能算是合格的程式設計師,馬上開始學演算法。今天第一天,加油。看 introduction to algorithms 第三版 chapter 2 插入演算法 書中的偽 for j 2to a.length key a j i...
A星演算法學習第一天
路徑規劃問題是在給定的地圖上,一直起點,並給定乙個目標點,從而尋找這其中的最短路徑。動態環境下尋路 避開行人 靜態環境下尋路 最短路徑 環境成本 避開障礙物 一 介紹a星演算法 三 實施說明 草圖a 演算法分成close和open兩個集合,open集合包含候選的節點,和起始位置點,close集包含已...
演算法練習 第一天
求1 1!1 3!1 5!1 7!1 n 1 2n 1 下面的演算法時間複雜度為o n 2 public class leijia leicheng sum sum sign a system.out.println sign a system.out.println 結果是 sum 求1 1!1 ...