利用遞迴實現快排:將陣列或者子陣列劃分成左右兩個陣列(如何劃分成左右兩個陣列,是第二步會講的),呼叫自身對左邊陣列和右邊陣列進行排序。
public void recquicksort(int left, int right) else
}
劃分所作的事情是,在陣列中選取乙個pivot樞紐值,然後劃分成兩個陣列。左邊的陣列的值比pivot小,右邊陣列的值比pivot大。
**實現如下:
private int partitionit(int left, int right, int pivot) else
}swap(leftptr, right); // 最終leftptr指向的位置肯定是比pivot大的。
return leftptr;
}
以上就是平民版的實現,它是基於選取最右邊的值最為pivot。考慮一種情況,如果乙個陣列是有序的,那麼每次劃分都只能劃分出乙個陣列。如此,效率肯定就下降了。那麼就pivot值的選取方式做修改,我們還可以有乙個公升級版或者說穩定版。
第一步的修改比較少,第二部的修改相對就大一點了。整天**如下:
public void recquicksort(int left, int right) else
}public int medianof3(int left, int right)
if(array[left] > array[right])
if(array[center] > array[right])
swap(center, right - 1);
return array[right - 1];
}private int partitionit(int left, int right, int pivot) else
}swap(leftptr, right - 1);
return leftptr;
}
成績排序 公升級版
有n個學生的資料,將學生資料按成績高低排序,如果成績相同則按姓名字元的字母序排序,如果姓名的字母序也相同則按照學生的年齡排序,並輸出n個學生排序後的資訊。測試資料有多組,每組輸入第一行有乙個整數n n 1000 接下來的n行包括n個學生的資料。每個學生的資料報括姓名 長度不超過100的字串 年齡 整...
氣泡排序公升級版 雞尾酒排序
雞尾酒排序等於氣泡排序的輕微變形,不同的地方在於從低到高然後從高到低,而氣泡排序則僅從低到高去比較序列裡的每個元素。他可以得到比氣泡排序稍微好一點的效能,原因是氣泡排序只從乙個方向進行比對 由低到高 每次迴圈只移動乙個專案。雞尾酒排序演算法的運作如下 從左到右,將最小的放到左邊 for int i ...
資料結構 排序(氣泡排序公升級版)
排序 氣泡排序法公升級版 include include include include 氣泡排序 氣泡排序 bubble sort 是一種電腦科學領域的較簡單的排序演算法。它重複地走訪過要排序的數列,一次比較相鄰的兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需...