1. 程式人生 > 其它 >MySQL_公共欄位自動填充

MySQL_公共欄位自動填充

技術標籤:演算法演算法

快速排序演算法的基本內容:選擇一個基準數,然後結合分治法,把資料分為兩個部分,如果你想要資料升序排列,那麼基準數左邊就需要比基準數小,基準數右邊就需要比基準數大,如果是降序排列則相反。接下來基準數左右兩邊資料繼續使用快速排序進行排序(一般使用遞迴),當左邊資料或右邊資料只剩一個元素時,則說明排序完成。下面我們結合具體資料來說明一下。

將下面這組資料由小到大進行排列.
在這裡插入圖片描述

1.首先我們先選擇一個基準數(base)通常是資料的第一位,也就是4,下標(baseindex)為0;
2.然後開始比較,規則如下:
在這裡插入圖片描述
(1)從右(right=4)開始向左遍歷,找到一個比基準數小的資料,找到之後發現right=3,

data[right]=2;然後把該項資料取走放入基準數所對應的資料項(data[baseindex]=data[right])。如下圖

(1)
(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"; } }