快速排序演算法的所用的方法是左右掃瞄法:當拿到一排無序的數列時,快速排序採取的方法是先找乙個樞軸(即乙個中間值,當然這個值不一定剛好就是這組數的中值)採用左右交替掃瞄法進行排序。
左右交替掃瞄法是:首先從右往左掃瞄這組值,把每乙個值都與樞軸比較,如果大於等於樞軸就繼續向左掃瞄,一旦小於樞軸就把這個值和樞軸交換,因為產生交換,這時就要從左往右開始掃瞄了,如果值小於樞軸就繼續往右掃瞄,一旦大於等於樞軸就把這個值和樞軸交換,產生交換後就又開始從右往左掃瞄繼續剛才的步驟,直到兩邊掃瞄到同乙個值時,這一輪就完成。
因為這是採用了遞迴思想,所以左右掃瞄法可能會要進行好幾遍,以下是實現的**
#includeusing namespace std;
void quick_sort(int a, int start, int end)
} a[i] = s;//因為在之前的交換值過程中a[i]的值已經不是最初的值,所以要變回來
quick_sort(a, start, i - 1);//排序樞軸前數列
quick_sort(a, i + 1, end);//排序樞軸後數列 }}
void put(int a,int length)
}int main() ;
cout << "排序前:";
put(a, 10);
quick_sort(a, 0, 9);
cout << "排序後:";
put(a, 10);
system("pause");
return 0;
}
這短短的**,裡面確是蘊含著大大的智慧型,對演算法越來越感興趣了,哈哈。如果對上面的**有疑問歡迎提問,我很樂意解答。 演算法 之 快速排序法
快速排序演算法 通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行 關鍵點 遞迴,折半 通常取第乙個數為對比 時間複雜度 平均 n logn function sort half a...
分治法之快速排序演算法
這週的演算法設計與分析的作業,要求是根據所講基本演算法選擇其一,給出具體事例,並且詳細描述演算法實現過程,同時利用一種語言程式設計實現,得出結果。將整個過程詳細整理上傳平台。上週所講演算法也只有那麼幾種 分治法,動態規劃 貪心演算法 回溯法 分值界限。這次用了分治法解決快速排序的問題。快速排序是c....
快速排序 遞迴演算法
快速排序原理 從乙個陣列中任意挑選乙個元素 通常為最左邊的元素 作為基準數,將剩下的元素和基準數進行比較,將小於等於中軸元素的放到基準數的左邊,經大於 中軸元素的放到基準數的右邊,然後以當前基準數的位置為界,將左半部分陣列和右 半部分陣列堪稱兩個新的陣列,重複上述操作,直到子陣列的元素個數小於等於1...