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;
}
總結
- 上一篇: 面试中说这些话,到手的offer很容易飞
- 下一篇: 超越BI,数据产品的前途在哪里?