C++快速排序

  快速排序作為排序家族里面最為快捷的方式,值得思考。我們將一個數組中的某一個數定為基點,然后通過快速排序按照需求(假設升序),將比基點小的數丟在基點左邊,把比基點大的數丟在基點右邊這樣來將基點數的正確位置找到。接著,我們再對基點兩邊的數組分別進行快排以達到有序的目的。

  舉例實際分析如下:

  int data[6] = {6,2,7,3,8,9};

  int i = left,j = right,key = data[left];

  初始數組為6 2 3 7 8 9,我們將基點數定位6進行第一次比較。

  此時right = 5,left = 0。先從右往左找尋比key小的數,right = 3時找到。將data[ left]賦值為data[right] -> 3 2 7 3 8 9。

  然后從左往右找比key大的數,i = 2時找到。我們將data[right]賦值為data[left] -> 3 2 7 7 8 9。

  左右找尋數的任務已經完成,此時應該將key值放在正確位置去了,但是這個位置是哪里?現在還不知道,因為左右標志位還不等,但是下一次循環開始后,發現left 和 right 在2的地方相等了。所以這個位置應該是2 -> 3 2 6 7 8 9。這樣,一次排序完成了。

  現在i 和 j 已經都變成了2而且6的正確位置已經找到了。但是按照算法的思路將這個數組分為左右兩部分該怎么辦,我們的left和right派上了大用場。從left 到 i - 1為左邊部分,從j + 1 到 right則為右半部分,對這兩部分進行遞歸快排最終可得到結果。

//
//  main.cpp
//  test
//
//  Created by MadMarical on 15/11/20.
//  Copyright (c) 2015年 com. All rights reserved.
//

#include <iostream>using namespace std;int pData[] = {6,2,7,3,8,9};void quickSort(int *p,int s,int t)
{int left,right;int key;left = s,right = t;key = p[left];if (s >= t){return;}while (left != right) //左右標志不等,在數組內尋找
    {while (left != right && p[right] >= key) //因為是升序,在數組里從右往左找尋一個比key小的數。
        {right--;}p[left] = p[right];while (left != right && p[left] <= key){left++;}p[right] = p[left];}p[left] = key;quickSort(p, s, left - 1);quickSort(p, right + 1, t);
}int main(int argc, const char * argv[])
{quickSort(pData, 0, 5);cout<<pData[0]<<" "<<pData[1]<<" "<<pData[2]<<" "<<pData[3]<<" "<<pData[4]<<" "<<pData[5]<<endl;return 0;
}

反思:

1.如果使用swap進行交換,在代碼理解上會減輕不少。

2.快速排序中的判斷方法和遞歸調用值得深思,網上的許多答案也是模棱兩可,還是要自己理解比較靠譜。

  

  

?

轉載于:https://www.cnblogs.com/thewaytomakemiracle/p/4981054.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/397216.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/397216.shtml
英文地址,請注明出處:http://en.pswp.cn/news/397216.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

回顧一年的工作歷程_【設備管理公司】召開20202021年度總結計劃表彰暨工作述職會議...

點擊上方藍字關注我們2020年即將過去&#xff0c;為了總結2020年各項工作開展情況&#xff0c;同時做好2021年工作計劃與部署&#xff0c;2020年12月30日-31日&#xff0c;設備管理公司組織召開了2020-2021年度總結計劃表彰暨工作述職會議。公司領導、各部門經理、部門主管、車…

注冊驗證的時候一直出現的報錯問題,終于解決了

今天再注冊驗證表單的時候一直報錯&#xff0c;但是什么都沒有改&#xff0c;就報錯了&#xff0c;后面才知道原來是和我上次上傳圖片的時候&#xff0c;導入的2個js的順序有關系的&#xff0c; 45行和41行互相換一下位置就好了 轉載于:https://www.cnblogs.com/likeji/p/61433…

重排序

一、重排序。 1、為什么需要重排序&#xff1f; 現在的CPU一般采用流水線來執行指令。一個指令的執行被分成&#xff1a;取指、譯碼、訪存、執行、寫回、等若干個階段。然后&#xff0c;多條指令可以同時存在于流水線中&#xff0c;同時被執行。 指令流水線并不是串行的&#x…

tableau三軸該怎么做_如何用tableau繪制城市地鐵線路圖?

在用tableau繪制地鐵線路圖之前&#xff0c;當然是要獲取相關的數據啦我們以鄭州目前已開通的地鐵為例&#xff0c;分別是1、2、5號線經度、維度可在 網頁上自行搜索哦&#xff08;以谷歌地圖為準&#xff09;有了這些下面我們就要開始啦將Excel中你所需要的數據直接導入到tabl…

JS七種加密解密方法

HTML或JS加密解密 本文一共介紹了七種方法&#xff1a;   一&#xff1a;最簡單的加密解密   二&#xff1a;轉義字符"\"的妙用   三&#xff1a;使用Microsoft出品的腳本編碼器Script Encoder來進行編碼 &#xff08;自創簡單解碼&#xff09;  …

提高solr的搜索速度

之前是使用12臺機分布式搜索&#xff0c;1臺為主機做索引并分發給子機&#xff0c;8臺做大索引搜索服務&#xff0c;3 臺做小索引搜索服務&#xff0c;配置基本是內存在4-8G&#xff0c;cpu:2-8core的服務器&#xff0c;索引的大小為8G。搜索的響應時間 是150ms左右。&#xff…

哲學到編程:思想的實例化

萬古長江水&#xff0c;千年儒釋道。歷史的長流中&#xff0c;蕓蕓眾生&#xff0c;參差不齊&#xff0c;但總是能夠總結出一個“生旦凈末丑”來。儒、釋、道&#xff0c;五千年的中華文化&#xff0c;卻總是圍繞著這三種主流思想交相演繹。千年間&#xff0c;豪士俊杰&#xf…

python 字符串交集_Python序列--集合(set)

集合集合用于保存不重復元素。- 集合和列表非常相似- 不同點&#xff1a;1.集合中只能存儲不可變對象2.集合中存儲的對象是無序(不是按照元素的插入順序保存)3.集合中不能出現重復的元素集合的所有元素都放在一對”{ }” 中&#xff0c;兩個相鄰的元素之間用”,”分隔。集合最好…

mysql binlog日志查看及解碼

mysql bin log日志導出 mysqlbinlog mysql-bin.000005 > /home/17bin.log 需要添加參數&#xff08;--base64-outputdecode-rows -v&#xff09;對輸出結果解碼 mysqlbinlog --base64-outputdecode-rows -v mysql-bin.000005 > /home/17bin.log轉載于:https://www.cnbl…

【Python開發】Python的GUI用法總結

引用模塊&#xff08;tkinter&#xff09;&#xff1a; 1 from tkinter import * 主窗口設置&#xff1a; 1 # 主窗口 2 tk Tk() # 主窗口實例化 3 tk.title("文本處理工具") # 主窗口標題 4 tk.geometry("700x4001001…

JAVA 環境變量配置

JAVA 環境變量配置 1. 安裝JDK 2.配置系統變量 新建          JAVA_HOME&#xff1a;D:\Program Files\Java\jdk1.8.0_65 Path添加       %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 新建CLASSPATH  .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; 3.完成…

8修改host_正點原子【STM32-F407探索者】第五十九章 USB 鼠標鍵盤(Host)實驗

1)資料下載:點擊資料即可下載2)對正點原子Linux感興趣的同學可以加群討論&#xff1a;9354467413&#xff09;關注正點原子公眾號&#xff0c;獲取最新資料更新上一章我們向大家介紹了如何利用 STM32F4 的 USB HOST 接口來驅動 U 盤&#xff0c;本章&#xff0c;我們 將利用 ST…

CF815C Karen and Supermarket [樹形DP]

題目傳送門 Karen and Supermarket On the way home, Karen decided to stop by the supermarket to buy some groceries. She needs to buy a lot of goods, but since she is a student her budget is still quite limited. In fact, she can only spend up to b dollars. Th…

linux命令積累之egrep命令

學搭建Nginx環境&#xff0c;必須要配置的Nginx.conf文件中&#xff0c;如下&#xff1a;#user nobody;worker_processes 1;#error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;#pid logs/nginx.pid;events { worke…

Sublime Text 3 安裝及插件推薦

本篇介紹跨平臺編輯器Sublime Text 3的安裝和其插件推薦。 目錄&#xff1a; 1.介紹 2.下載安裝 3.插件 4.參考資料 1.介紹 Sublime Text具有漂亮的用戶界面和強大的功能&#xff0c;例如代碼縮略圖&#xff0c;Python的插件&#xff0c;代碼段等。還可自定義鍵綁定&#xff0c…

6工程文件夾作用_data_dragon數據工程小工具收集

最近在GitHub上創建了一個新工程&#xff0c;收集個人在數據工程工作的小工具集合&#xff0c;命名為data_dragon (數據一條龍)。取這個名字的是希望這些腳本或代碼能夠復用&#xff0c;端到端地減少臨時數據處理的時間。最近因為工作上的一些變化&#xff0c;寫作節奏有點被打…

暑假第十七測

題解&#xff1a; 第一題 #include<bits/stdc.h> using namespace std; #define ll long long const int M 1e5 10; ll a[M], b[M], ans; priority_queue <ll, vector<ll> , greater<ll> > Q; int main(){freopen("buy.in","r",…

Uva 11354 LCA 倍增祖先

題目鏈接&#xff1a;https://vjudge.net/contest/144221#problem/B 題意&#xff1a;找一條從 s 到 t 的路&#xff0c;使得瓶頸路最小。 點的數目是10^4&#xff0c;如果向之前的方案求 maxcost數組&#xff0c;O(n*n)時間是過不了的&#xff0c;這個時候&#xff0c;用到了…

Nginx搭建flv視頻點播服務器

Nginx搭建flv視頻點播服務器前一段時間使用Nginx搭建的多媒體服務器只能在緩沖過的時間區域內拖放, 而不能拖放到未緩沖的地方. 這就帶來了一個問題: 如果視頻限速的速率很小, 那么客戶端觀看視頻時肯定不流暢, 而且用戶不能向前拖放, 用戶體驗很不好. 如果視頻限速的速率很大或…

編碼拾遺

1 #!/usr/bin/env python32 #-*- coding:utf-8 -*-3 4 Administrator 5 2018/8/16 6 7 8 # fopen("demo","r",encoding"utf8")9 # dataf.read() 10 # print(data) 11 # f.close() 12 13 14 # print("沈哲子") 15 16 s"中國&qu…