回顧冒泡排序、快速排序,直接選擇排序以及遞歸思想。快速排序和二分查找都融入了分而治之的思想,一分再分,遞歸之。
1、冒泡排序
相鄰元素之間逐對兩兩比較,若不符合預期則先交換位置再繼續比較,如此,每次比較都能把最大或最小的元素放在預期位置,直到完成排序。
2、快速排序
1、准備工作:先選定一個參考值,設置兩個指針(設為i,j,分別指向數字序列的頭和尾)。
2、同時從數字序列的兩頭進行掃描對比,將大於參考值的數字都放於參考值的一側,小於參考值的數字置於另一側。直到i,j指向同一個位置,這個位置即為參考值的預期位置,設為m。
3、對大於參考值一側,令i=m+1,對小於參考值的一側,令j=m-1。再分別對參考值的兩側重復步驟1、2。
4、重復步驟1、2、3,直到i>j。
public static int getMiddle(int[] array, int i, int j)
{
int key = array[i];
while(i<j)
{
//從前向后掃描
while (i<j && array[j]>key)
{
j--;
}
array[i] = array[j];
//從后向前掃描
while (i<j && array[i]<key)
{
i++;
}
array[j] = array[i];
}
array[j] = key;
return j;
}
//遞歸的思想,反復划分,直到只剩一個元素。
public static void qSort(int[] array, int i, int j)
{
if(i<j)
{
int middle = getMiddle(array, i, j);
qSort(array, i, middle-1);
qSort(array, middle+1, j);
}
}
3.選擇排序
就像打擂台,把元素一個一個往擂台上擺,優勝劣汰,從而確定第一名,第二名,第三名。。。直到排序完成。
4、二分查找算法
要求,序列是有序的,思想與快速排序類似,也運用了分而治之。
記得應用遞歸時,return,否則會一直執行到return -1,結束,導致輸出始終為-1.