快速排序的基本思想為分治法
分:是指將問題的規模分解為若干個小的模組,並且與原問題的性質一致。
這裡我們可以將陣列中r[low,...high]中任意挑選乙個座位基準,記為keyvalue,以此劃分成兩個較小的子區間r[low,keyvalueposition-1]和r[keyvalueposition+1,high],使左子區間的記錄均小於等於右子區間的記錄,右子區間的記錄均大於等於基準記錄。快排的關鍵是求出基準記錄所在的位置keyvalueposition。
治:對左右區間均進行快速排序求解
具體過程:
設序列為r[low,high],從其中選第乙個為基準,設為keyvalue,然後設兩個指標i和j,分別指向序列r[low,high]的起始和結束位置上:
1),將i逐漸增大,直到找到大於
keyvalue
的關鍵字為止;
2),將j逐漸減少,直到找到小於等於
keyvalue
的關鍵字為止;
3),如果i
keyvalue
放到合適的位置上,即i和j同時指向的位置(或者同時指向的位置-1),則此位置為新的
keyvalueposition
。using system;
using system.collections.generic;
using system.linq;
using system.text;
namespace sort
;int lowindex = 0; //陣列的起始位置,從0開始
int highindex = array.count()-1; //陣列的終止位置
//快速排序
quicksortfunction(array,lowindex,highindex);
//輸出排序後的陣列
for (int i = 0; i < array.count(); i++)
}//實現快速排序(目標陣列,起始位置,陣列終止位置)
private static void quicksortfunction(int a, int low, int high)
// throw new notimplementedexception();
}private static int getkeyvalueposition(int a, int low, int high)
while (leftindex < rightindex && a[rightindex] > keyvalue)//右側動態下表逐漸增加,直至找到陣列內值小於keyvalue的下標
if (leftindex < rightindex)//當左動態下標小於右動態下標,則交換左右動態下標所指的值,直至leftindex=rightindex
}//當leftindex=rightindex,此時可以確定keyvalue的位置
temp = keyvalue;
if (temp < a[rightindex])//當keyvalue < 左右下標同時指向的值,將keyvalue與rightindex - 1指向的值交換,並返回rightindex - 1
else
throw new notimplementedexception();}}
}
快速排序之C 實現
快速排序之c 實現 一趟快速排序的演算法是 1 設定兩個變數i j,排序開始的時候 i 0,j n 1 2 以第乙個陣列元素作為關鍵資料,賦值給key,即key a 0 3 從j開始向前搜尋,即由後開始向前搜尋 j 找到第乙個小於key的值a j 將a j 和a i 互換 4 從i開始向後搜尋,即由...
每日練習之c 冒泡程式的實現
using system using system.collections.generic using system.linq using system.text namespace sort 宣告初始化,方法二,宣告同時對陣列賦值 int a new int 10 宣告初始化,方法三 利用控制台輸...
C 排序演算法練習 快速排序
在所有的技藝中,武功是最強調內功的,比如同樣都學了辟邪劍譜,為什麼岳不群要比林平之厲害?武功的招式固然重要,但沒有深厚的內功,威力會大打折扣.那麼,內功是怎麼練出來的呢?冬練三九,夏練三伏,古人早有定論.而這些道理用在程式開發上也一樣適用.include using namespace std 演算...