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...