MySQL_公共欄位自動填充
阿新 • • 發佈:2021-01-30
快速排序演算法的基本內容:選擇一個基準數,然後結合分治法,把資料分為兩個部分,如果你想要資料升序排列,那麼基準數左邊就需要比基準數小,基準數右邊就需要比基準數大,如果是降序排列則相反。接下來基準數左右兩邊資料繼續使用快速排序進行排序(一般使用遞迴),當左邊資料或右邊資料只剩一個元素時,則說明排序完成。下面我們結合具體資料來說明一下。
將下面這組資料由小到大進行排列.
1.首先我們先選擇一個基準數(base)通常是資料的第一位,也就是4,下標(baseindex)為0;
2.然後開始比較,規則如下:
(1)從右(right=4)開始向左遍歷,找到一個比基準數小的資料,找到之後發現right=3,
(2)然後,從左(left=0)開始向右遍歷,找到一個比基準數大的資料,找到之後發現left=2,
data[left]=5;然後把該項資料取走放入data[right],所對應的資料項(data[right]=data[left]),由(1)可知right=3。如下圖
(3)從右(right=3)開始向左遍歷,我們發現當right>left的情況下,找不到比基準數小的資料。right減1,此時right=left=2為基準元素所在位置,由(2)可知left=2。如下圖
此時我們發現一趟快排完成後,雖然資料還是無序的但基準數base(4)的左邊都是小於它,右邊都大於它。接著我們繼續對
和
進行快速排序,直到排序的資料個數等於1則停止排序。
程式碼如下:
#include <iostream>
//start要排資料的開始索引,end要排資料的結尾索引
void KuaiSort(int data[], int start, int end)
{
//如果只剩一個元素則停止遞迴
if (start-end!=1)
{
int right{}, left{};
left = start;//左起點
right = end;//右終點
int base = data[start];//基準元素
while (right>left)
{
//從最右端開始遍歷
while (right>left)
{
//找到比基點元素小的元素,填入left的位置
if (data[right]<base)
{
data[left] = data[right];
break;
}
else
{
right--;
}
}
//從最左端開始遍歷
while (right > left)
{
//找到比基準元素大的元素,填入right的位置
if (data[left] > base)
{
data[right] = data[left];
break;
}
else
{
left++;
}
}
}
//一趟快排結束,right=left以變為中間位置,放入基準元素
data[right] = base;
KuaiSort(data, start, left - 1);//把中間位置的左邊元素再進行快速排序
KuaiSort(data, right + 1, end);//把中間位置的右邊元素再進行快速排序
}
}
int main()
{
int arry[] = { 4,3,1,2,6 };
KuaiSort(arry, 0, 4);
for (int i = 0; i < 5; i++)
{
std::cout << arry[i] << "\t";
}
}