日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++快速排序

發布時間:2025/3/15 c/c++ 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++快速排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C++快速排序

開發工具與關鍵技術:C++、VisualStudio 作者:何任賢 撰寫時間:2019年08月01日 快速排序就是排序速度很快的排序方法,那么它到底是怎么排序的?首先我們需要一個數組如arr{2,4,1,3,5},然后需要兩個變量x、y,x是arr數組的第一個索引值,y是arr數組的最后一個索引值,也就是x = 0、y = 4,我們現在還需要一個基準數tmp,那么基準數一般是第一個元素做基準數也就是tmp = arr[x],x和y是索引值,tmp是元素值,升序排序大概是這樣的,就是tmp和arr[y]比較 如果tmp小于arr[y]那么y--,直到tmp大于arr[y],然后arr[x] = arr[y],x++然后tmp和arr[x]比較,小于tmp,x++,大于tmp,arr[y] = arr[x],這時arr數組的元素順序應該是{1,2,4,3,5},然后就是分成兩個遞歸,遞歸1把x和y變成x=0,y=0重新執行剛才的步驟,遞歸2把x和y變成x=2,y=4重新執行剛才的步驟,遞歸的結束條件就是x>=y就結束遞歸。下面就是一個快速排序的例子和運行結果。

#include
using namespace std;

void quickSort(int s[], int l, int r)
{
// 遞歸結束的條件
if (l >= r)
{
return;
}
int i = l; // 開始位置
int j = r; // 最后一個元素的位置
// 基準數
int tmp = s[l]; // 取第一個元素作為基準數 – i的位置是坑
while (i < j) // 循環判斷
{
// j位置的元素, 大于等于基準數
while (i<j && s[j] >= tmp)
{
// 前移
j–;
}
// 找到了填坑的數
if (i < j)
{
// 填坑
s[i] = s[j]; // j變成坑
i++;// i后移
}
// 移動i, 坑不移動
// i位置的元素 小于基準數
while (i < j && s[i] < tmp)
{
i++;
}
// 找到了大于等于基準數的元素
if (i < j)
{
// 填后邊的坑
s[j] = s[i];
// j前移
j–;
}
}
// i j 相遇 i==j
// 填坑
s[i] = tmp;
// 拆分左半部分
quickSort(s, l, i - 1);
// 右
quickSort(s, i + 1, r);
}
int main()
{
int i;
//定義整型數組
int array[] = { 12, 5, 33, 6, 10 };
//計算數組長度
int len = sizeof(array) / sizeof(int);
//遍歷數組
cout << "待排序數組序列: ";
for (i = 0; i < len; ++i)
{
cout << array[i] << " ";
}
cout << “\n”;
quickSort(array, 0, len - 1); //排序
cout << "快速排序之后的序列: ";
for (i = 0; i < len; ++i) //遍歷
{
cout << array[i] << " ";
}
cout << “\n”;
return 0;
}

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的C++快速排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。