每日練習之c 快速排序的實現

2021-06-16 20:50:08 字數 1648 閱讀 4835

快速排序的基本思想為分治法

分:是指將問題的規模分解為若干個小的模組,並且與原問題的性質一致。

這裡我們可以將陣列中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 演算...