亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C語言實現快速排序

2020-05-23 13:28:26
字體:
來源:轉載
供稿:網友

快速排序算法是一種分治排序算法.它將數組劃分為兩個部分,然后分別對兩個部分進行排序.我們將看到,劃分的準確位置取決于輸入數組中元素的初始位置.關鍵在于劃分過程,它重排數組,使得以下三個條件成立:(i)對于某個i,a[i]在最終位置上 (ii)a[left],...,a[i-1]中的元素都比a[i]小 (iii)a[i+1],...a[right]中的元素都比a[i]大.我們通過劃分來完成排序,然后遞歸地應用該方法處理子數組.

我們使用一般策略來實現劃分.首先,我們任選一個a[right]作為劃分元素,這個元素劃分后將在最終的位置上.然后,從數組的左端開始掃描,直到找到一個大于劃分元素的元素;再從數組的右端開始掃描,直到找到一個小于劃分元素的元素.使掃描停止的兩個元素,顯然在最終劃分的數組中的位置相反,于是交換這兩個元素.繼續這一過程,我們就可以保證數組中位于左側指針左側的元素都比劃分元素小,位于右側指針右側的元素都比劃分元素大.

劃分時,變量temp保存了劃分元素a[right]所在的位置,i和j分別是左掃描指針和右掃描指針.劃分循環使得i增加j減小,while保持一個不變的性質-i左側沒有元素比temp大,j右側沒有元素比temp小.一旦兩個指針相遇,我們就交換a[i]和a[right],即將v賦給a[i],這樣v左側的元素都小于等于v,v右側的元素都大于等于v,結束了劃分過程.劃分循環是一個不確定的循環,當兩個指針相遇時,就通過break語句結束,測試j=left用來防止劃分元素是數組中最小的元素.

快速排序的遞歸算法

#include <cstdio>#include <cstdlib>#include <algorithm>#include <stack>#include <queue>#include <malloc.h>using namespace std;#define OK 1#define ERROR -1#define TRUE 1#define FALSE 0typedef int Status;//輸出函數void Print(int a[], int l, int r){ int i; for(i = l; i <= r; i++) {  printf("%d ", a[i]); } printf("/n");}//劃分函數int partion(int a[], int left, int right){ //取最右邊的元素作劃分元素 int temp = a[right]; //記錄 i = left, j = right int i = left, j = right-1; //循環直到左右指針相遇 while(true) {  //從左邊開始掃描,當出現比劃分元素大的元素,掃描停止  while(temp > a[i])  {   i++;  }  //從右邊進行掃描,當出現比劃分元素小的元素,掃描停止  while(temp < a[j] && j >= left)  {   j--;  }  //如果 i >= j, 循環截止,下面的交換不執行  if(i >= j) break;  //交換停止時的元素  swap(a[i], a[j]); } //交換該元素與劃分元素 swap(a[i], a[right]); Print(a, 0, 6); //printf("i = %d", i); //劃分過程結束 return i;}//快速排序void qsort(int a[], int left, int right){ //排序完成,循環截止 if(right <= left)  return; //做劃分 int i = partion(a, left, right); //對左部分排序 if(left < (i-1))  printf("對%d~%d排序/n", left, i-1), qsort(a, left, i-1); //對右部分排序 if(right > (i+1))  printf("對%d~%d排序/n", i+1, right), qsort(a, i+1, right);}int main(){ int a[7] = {2, 5, 3, 7, 6, 1, 4}; //快速排序 printf("對0~6排序/n"); qsort(a, 0, 6); Print(a, 0, 6); return 0;}

非遞歸快速排序

快速排序的非遞歸實現使用了一個顯式的下推棧,使用向棧中壓入參數和過程調用/退出不斷地從棧中彈出參數來替代遞歸調用,這個過程繼續直到棧為空.我們把兩個子數組中的較大者壓入棧中來確保最大棧的深度為lgN,如果對N個元素進行排序.

void qsort(int a[], int left, int right){ int i; //定義棧s stack<int> s; //先判斷棧是否為空 while(!s.empty()) {  //若棧不為空,將棧中元素移出  s.pop(); } //將right入棧 s.push(right); //將left入棧 s.push(left); //while循環,當棧為空時,循環結束 while(!s.empty()) {  //元素left出棧  left = s.top(), s.pop();  //元素right出棧  right = s.top(), s.pop();  //判斷left與right的關系,如果left>=right,continue  if(left >= right)  {   continue;  }  //作劃分  i = partion(a, left, right);  //比較兩個子數組的大小  //將子數組中的較大者壓入棧  if((i-1-left) > (right-i-1))  {   s.push(i-1);   s.push(left);   s.push(i+1);   s.push(right);  }  else  {   s.push(i+1);   s.push(right);   s.push(i-1);   s.push(left);  } }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品国产v日韩v亚洲| 影音先锋欧美精品| 亚洲成人精品视频| 国产成人+综合亚洲+天堂| 亚洲福利在线看| 亚洲电影免费观看高清完整版在线观看| 国产一区二区三区在线免费观看| 久久91精品国产| 亚洲视频日韩精品| 奇米一区二区三区四区久久| 欧美一级高清免费播放| 久久久免费av| 国产视频久久网| 日韩中文视频免费在线观看| 日韩中文字幕免费视频| 亚洲人成人99网站| 中文字幕亚洲专区| 中文日韩电影网站| 91网站在线看| 久久久女女女女999久久| 97av在线影院| 91国在线精品国内播放| 激情av一区二区| 亚洲女人天堂网| 亚洲天堂成人在线视频| 欧美高清在线视频观看不卡| 国产精品成av人在线视午夜片| 亚洲精品av在线| 亚洲精品91美女久久久久久久| 91亚洲精品久久久久久久久久久久| 国产日韩欧美黄色| 91精品视频在线| 日韩免费电影在线观看| 欧美成人性色生活仑片| 久久艳片www.17c.com| 国产69久久精品成人看| 久久天堂电影网| 国产69精品久久久久9| 久久久噜噜噜久噜久久| 亚洲视频视频在线| 伦伦影院午夜日韩欧美限制| 国产精品久久久久久久一区探花| 成人国产精品av| 一区二区三区四区精品| 久久中文字幕国产| 色综合天天综合网国产成人网| 久久精品国亚洲| 全色精品综合影院| 日本一本a高清免费不卡| 欧美午夜精品久久久久久人妖| 欧美噜噜久久久xxx| 91美女片黄在线观| 日韩精品在线免费| 亚洲系列中文字幕| 久久久久久久久久久免费精品| 精品福利一区二区| 色婷婷av一区二区三区久久| 国产成人高潮免费观看精品| 久久久噜噜噜久久中文字免| 亚洲人成电影在线播放| 日韩在线观看高清| 国产精品高潮粉嫩av| 国产亚洲精品久久| 欧美日韩久久久久| 久久久久久久久91| 久久国产精彩视频| 中文字幕无线精品亚洲乱码一区| 国产精品日韩在线观看| 亚洲一级免费视频| 亚洲精品中文字幕女同| 日韩精品免费综合视频在线播放| 国产99久久精品一区二区| 国产精品一区二区久久久久| 久久天天躁夜夜躁狠狠躁2022| 精品中文字幕久久久久久| 国产亚洲欧洲高清一区| 欧美日韩在线视频首页| 国产午夜精品全部视频在线播放| 2019中文字幕在线| 亚洲级视频在线观看免费1级| 欧美性生交xxxxx久久久| 欧美壮男野外gaytube| 国产成人亚洲综合91精品| 亚洲一区中文字幕在线观看| 国产精品高清免费在线观看| 亚洲欧美激情精品一区二区| 伊人久久久久久久久久久| 国产伦精品一区二区三区精品视频| 91亚洲国产成人久久精品网站| 亚洲www在线观看| 久久久噜噜噜久久中文字免| 欧美高清不卡在线| 57pao成人永久免费视频| 欧美一级在线亚洲天堂| 国产精品免费久久久久影院| 欧美日韩中文字幕| 中日韩美女免费视频网址在线观看| 欧美韩国理论所午夜片917电影| 久久亚洲春色中文字幕| 欧美视频在线观看 亚洲欧| 国产精品久久一区| 97在线视频精品| 91免费看片网站| 性金发美女69hd大尺寸| 蜜臀久久99精品久久久久久宅男| 亚洲性生活视频| 久久国产精品99国产精| 日韩av大片在线| 97久久伊人激情网| 日本精品久久久| 97视频在线观看免费| 91精品国产自产在线观看永久| 亚洲高清免费观看高清完整版| 国产欧美日韩精品丝袜高跟鞋| 亚洲精品国偷自产在线99热| 日韩av成人在线观看| 国产欧美精品一区二区三区-老狼| 久久亚洲成人精品| 欧美日韩国产91| 欧美日韩国产123| 精品久久久久久久久久久久久| 欧美美女18p| 精品久久久久久亚洲精品| 国产成人精品一区二区| 亚洲精品一区在线观看香蕉| 久久九九有精品国产23| 亚洲区在线播放| 国产香蕉一区二区三区在线视频| 国产精品中文字幕久久久| 久久久人成影片一区二区三区观看| 色老头一区二区三区| 91在线中文字幕| 麻豆一区二区在线观看| www.欧美视频| 一道本无吗dⅴd在线播放一区| 麻豆成人在线看| 国产精品色婷婷视频| 欧美高清在线播放| 亚洲福利视频网| 国产精品一久久香蕉国产线看观看| 91亚洲午夜在线| 日韩一区二区av| 日韩精品中文字幕视频在线| 国产日韩在线看片| 日韩av电影手机在线| 97国产精品免费视频| 在线视频免费一区二区| 国产精品免费网站| 国产精品自拍偷拍视频| 中文字幕精品国产| 国产欧美在线观看| 91中文精品字幕在线视频| 欧美性极品少妇精品网站| 中文字幕国内精品| 亚洲美女精品久久| 亚洲电影第1页| 色婷婷成人综合| 亚洲精品美女久久| 亚洲天堂av在线免费观看| 69久久夜色精品国产69乱青草| 按摩亚洲人久久| 久久久亚洲成人| 97碰在线观看| 欧美午夜激情小视频|