快速排序實現以及相關筆試題

2021-09-09 04:10:34 字數 1292 閱讀 5794

1 快速排序的實現
思想:指定劃分元素,如key=data[l],然後i先由左至右遍歷陣列並同時判斷與key的大小,比key大則停止遍歷,再j從右向左開始遍歷陣列並同時判斷與key的大小,比key小則停止,兩趟比較後,比較i與j的大小,i>j則不交換兩數,否則交換data[i]與data[j]。當i>j時交換data[j]與data[l],最後返回key的位置j。這是一次劃分,再分別從l -- j-1 和 j+1 -- h重複上面的劃分過程.

具體**如下:

void exch(int &a, int &b)  //交換兩個元素

//劃分位置

int partion(int *data, int l, int h)

exch(data[l], data[j]);

return j;

}//快速排序

void qsort(int *data, int l, int h)

int less(int a, int b)

exch(data[l], data[j]);

return j;

}void sort(int *data, int l, int h)

思路:就是在劃分陣列的過程中,將劃分起始位置元素除以0,能整除則停止由左向右的遍歷,開始由右向左遍歷,步驟與上述一樣

**如下

//使用快速排序的思想解決劃分奇偶數問題

void pivot_event(int *data, int l, int h, bool (*pfun)(int)) //pfun函式指標指向isevent函式

exch(data[l], data[j]);

}

思路與快速排序的思想一模一樣,在一次劃分後的位置j,如果比k-1大,則在l -- j-1處繼續劃分陣列;如果比k-1小,則在j+1 -- h處劃分陣列,直到j==k位置時停止劃分陣列

**如下:

//使用快排思想找到陣列的第k大的數

int pivot_k(int *data, int l, int k, int h, bool (*pfun)(int, int)) //pfun函式指標指向isless函式

exch(data[l], data[j]);

if(jk-1)

pivot_k(data, l, k, j-1, isless);

else

return j;

}

python 幾種快速排序的實現以及執行時間比較

快速排序的基本思想 首先選定乙個陣列中的乙個初始值,將陣列中比該值小的放在左邊,比該值大的放在右邊,然後分別對左邊的陣列進行如上的操作,對右邊的陣列進行如上的操作。分治 遞迴 1.利用匿名函式lambda 匿名函式的基本用法func name lambda x array,冒號左邊的x代表傳入的引數...

python 幾種快速排序的實現以及執行時間比較

快速排序的基本思想 首先選定乙個陣列中的乙個初始值,將陣列中比該值小的放在左邊,比該值大的放在右邊,然後分別對左邊的陣列進行如上的操作,對右邊的陣列進行如上的操作。分治 遞迴 1.利用匿名函式lambda 匿名函式的基本用法func name lambda x array,冒號左邊的x代表傳入的引數...

python 快速排序某筆試題

下面展示一些內聯 片。a code block var foo bar def get mid arr,left,right 前面是陣列,然後是索引 先設定乙個基準值 pivot right 基準值是右邊的時候,先從左邊開始遍歷 while leftwhile left arr pivot left...