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

首頁 > 編程 > C > 正文

C語言實現快速排序

2020-01-26 13:39:35
字體:
來源:轉載
供稿:網友

快速排序算法是一種分治排序算法.它將數組劃分為兩個部分,然后分別對兩個部分進行排序.我們將看到,劃分的準確位置取決于輸入數組中元素的初始位置.關鍵在于劃分過程,它重排數組,使得以下三個條件成立:(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);  } }}

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久99久久久久久久噜噜| 国产精品高潮呻吟视频| 日本最新高清不卡中文字幕| 久久精品2019中文字幕| 国产精品久久久久久久一区探花| 欧美又大粗又爽又黄大片视频| 精品久久在线播放| 一色桃子一区二区| 国产a级全部精品| 久久亚洲国产精品| 2019国产精品自在线拍国产不卡| 日本精品久久久久久久| 欧美激情亚洲国产| 一区二区在线免费视频| 欧美一级淫片丝袜脚交| 中文字幕日韩欧美在线| 色综合天天综合网国产成人网| 日韩在线视频中文字幕| 日韩精品中文字幕在线播放| 久久影视电视剧凤归四时歌| 国产99久久精品一区二区| 成人av在线天堂| 中文字幕亚洲一区二区三区| 欧美亚洲日本黄色| 中文字幕成人精品久久不卡| 中文日韩电影网站| 精品激情国产视频| 欧美激情视频网| 国产成人高清激情视频在线观看| 亚洲欧美一区二区三区久久| 欧美一级视频在线观看| 国产福利视频一区| 日韩中文理论片| 午夜免费在线观看精品视频| 亚洲国产欧美日韩精品| 国模精品视频一区二区| 国产在线拍揄自揄视频不卡99| 亚洲精品在线视频| 国内外成人免费激情在线视频网站| 91免费人成网站在线观看18| 岛国精品视频在线播放| 亚洲va久久久噜噜噜| 成人免费视频网| 在线观看久久久久久| 久久久成人精品视频| 精品久久久久久亚洲精品| 精品国模在线视频| 国产成人一区二区三区| 久久久伊人欧美| 中文字幕亚洲综合久久| 久久精品国产96久久久香蕉| 国产97在线|日韩| 国产一区二区美女视频| 一区二区三区在线播放欧美| 亚洲护士老师的毛茸茸最新章节| 91久久精品美女| 亚洲国产精品久久久| 日韩精品在线免费播放| 亚洲精品视频播放| 日韩在线视频导航| 欧美在线视频一区| 欧美激情在线播放| 91精品国产色综合久久不卡98| 欧美最顶级丰满的aⅴ艳星| 欧美理论电影在线播放| 亚洲影视九九影院在线观看| 97精品国产91久久久久久| 国产精品电影一区| 成人h视频在线观看播放| 欧美激情va永久在线播放| 中文字幕欧美日韩在线| 欧美黑人xxx| 欧美亚洲在线视频| 成人妇女淫片aaaa视频| 久久久久久久久久av| 亚洲综合日韩中文字幕v在线| 91久久久久久久| 97精品伊人久久久大香线蕉| 亚洲男人的天堂在线播放| 一区二区欧美激情| 欧美激情一区二区三区在线视频观看| 亚洲精品福利视频| 国产精品私拍pans大尺度在线| 亚洲国产高清福利视频| 亚洲字幕一区二区| 国产一区二区丝袜| 亚洲成人激情图| 成人免费福利视频| 欧美亚洲在线观看| 国产91ⅴ在线精品免费观看| 中文国产成人精品| 国产精品久久久久久久天堂| 亚洲欧洲中文天堂| 欧美激情亚洲国产| 国产丝袜一区二区三区| 日韩女在线观看| 尤物yw午夜国产精品视频明星| 亚洲色图18p| 成人写真视频福利网| 午夜精品久久久99热福利| 日韩国产激情在线| 久久99精品久久久久久琪琪| 成人免费淫片视频软件| 欧美巨乳在线观看| 久久精品国产欧美激情| 国产成人鲁鲁免费视频a| 97色在线观看免费视频| 91久久久久久久一区二区| 成人免费淫片视频软件| 亚洲精品短视频| 中文字幕日韩视频| 国产美女精品免费电影| 国产视频精品xxxx| 国产精品欧美亚洲777777| 久久精品国产精品亚洲| 国产视频久久久久久久| 久久不射电影网| 久久久久久亚洲精品中文字幕| 久久久国产精品x99av| 久久久精品电影| 久久久久久久久久久网站| 色综合久综合久久综合久鬼88| 久久久综合免费视频| 欧美视频在线观看免费网址| 亚洲免费精彩视频| 久久精品最新地址| 国产精品福利网站| 亚洲xxxx18| 另类美女黄大片| 欧美区二区三区| 日韩少妇与小伙激情| 亚洲精品一区二区三区婷婷月| 国产中文日韩欧美| 国产成人激情视频| 亚洲自拍在线观看| 亚洲男人天堂2019| 中日韩美女免费视频网址在线观看| 成人精品在线观看| 欧美孕妇毛茸茸xxxx| 日韩女优人人人人射在线视频| 97久久精品在线| 免费97视频在线精品国自产拍| 精品免费在线视频| 国产一区二区三区直播精品电影| 成人久久久久久久| 日韩精品免费在线视频| 亚洲自拍在线观看| 亚洲在线免费看| 亚洲级视频在线观看免费1级| 91高潮精品免费porn| 国内免费久久久久久久久久久| 久久精品国产2020观看福利| 亚洲一区二区自拍| 日本欧美精品在线| 国产在线精品成人一区二区三区| 国产精品久久久久久久久久久久久| 中国人与牲禽动交精品| 久久成人国产精品| 国产精品美女www爽爽爽视频| 97av在线视频免费播放| 欧美黑人巨大xxx极品| 日韩欧美在线观看视频| 国产乱人伦真实精品视频| 日本成人激情视频|