C++快速排序(二)
生活随笔
收集整理的這篇文章主要介紹了
C++快速排序(二)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
引言
此文繼上一次的c++快速排序之后,是時隔一年后的重新領悟。快速排序就是從一列序列中選擇一個數作為基數,一般以左邊第一個元素為基數,然后定義兩個變量left與right,left指向左邊第一個元素,與基數指向相同,right指向右邊倒數第一個元素,從右側開始移動right找到比基數小的元素,然后從左側開始找到比基數大的元素,將右側比基數小的元素與左側比基數大的元素,即left與right指向的元素交換位置,再繼續(xù)從右邊開始移動right找出比基數小的元素,移動左邊的left找到比基數大的元素,交換right與left指向的元素的位置,繼續(xù)執(zhí)行該操作,直到lfet指向的元素與right指向的元素是同一個元素,此時交換left指向的元素與基數的值,達到了左邊的元素比基數小,右邊的元素比基數大,再將基數左邊所有的元素看成一個序列,基數右邊所有的元素看成一個序列,兩個序列按照之前的方式,選取左起第一個元素為基數,同時left指向左起第一個元素,right指向序列最后一個元素,繼續(xù)之前的操作。基數選擇左起第一個元素時,要先從右邊開始移動下標查找,基數選擇右邊的元素,需要從左邊開始移動查找。與按照從小到大的順序排列和從大到小的順序排列沒有關系。
示例
下面是實現快速排序的代碼,采用vs2010開發(fā)的控制臺輸出程序:
// quickSort.cpp : 定義控制臺應用程序的入口點。 //#include "stdafx.h" #include <stdlib.h> #include <iostream>using namespace std;/************************************************************************/ /* 功能:快速排序 (從小到大)3,5,2,7,9,1,6功能函數:void quickSort(int *parr,int left,int right) 快速排序void printArr(int *parr,int n) 輸出數組元素*/ /************************************************************************/void quickSort(int *parr,int left,int right) {int base,temp;int i = left;int j = right;base = parr[left];if(left >= right)//一個數或者不滿足left<right則跳出循環(huán){return;}while (i < j)//左邊下表小于右邊{while (parr[j] >= base && i < j)//右側開始,尋找比基數小的元素,未找到下標減減{--j;}while(parr[i] <= base && i < j)//左側開始找比計數大的元素,未找到下標加加{++i;}if (i < j)//坐標的下標小于右邊的下標,且找到左邊比基數大的元素,右邊比基數小的元素,交換位置{temp = parr[j];parr[j] = parr[i];parr[i] = temp;}}parr[left] = parr[i];//左邊的下標等于右邊的下標,交換該元素,與基數的位置parr[i] = base;quickSort(parr,left,i-1);//左邊序列排序quickSort(parr,i+1,right);//右邊序列排序 }void printArr(int *parr,int n) {for(int i = 0; i < n; ++i){cout<<parr[i]<<"\t";} }int _tmain(int argc, _TCHAR* argv[]) {int arr[] = {3,5,2,7,9,1,6};printArr(arr,7);cout<<endl;quickSort(arr,0,6);printArr(arr,7);cout<<endl;system("pause");return 0; }項目的結構:
運行效果
重在理解,僅供參考。
總結
以上是生活随笔為你收集整理的C++快速排序(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: qt中xml文件的更新
- 下一篇: java管理员登录_idea实现管理员登