Bootstrap

GESP语法知识(快速排序)

参考程序1(基点选择为中点):

#include<iostream>
using namespace std;
int a[101];
void qsort(int l,int r)
{
	if (l >= r)   return;   
	int i,j,mid,p;
	i=l;
	j=r;
	mid=a[(l+r)/2];   //选取中间位置作为分隔数
	do
	{
		while(a[i]<mid) i++;
		while(a[j]>mid) j--;
		//若找到一组与排序不一致的数对,交换它们 
		if(i<=j)    
		{
			p=a[i];a[i]=a[j];a[j]=p;
			i++;j--;
		}
	} while(i<=j) ;   //注意这里不要少了等号
	if(l<j)  qsort(l,j);  //若未到边界,继续递归搜索左右区间 
	if(i<r)  qsort(i,r);
}
int main()
{
	int n,i;
	cin>>n;
	for(i=1;i<=n;i++)
		cin>>a[i];   //输入数组 
	qsort(1,n);
	for(i=1;i<=n;i++)
		cout<<a[i]<<" ";
	cout<<endl;
	return 0;
}

参考程序2(基点选择为最后一个元素)

#include <iostream>
#include <vector>
using namespace std;

// 分区函数
int partition(vector<int>& arr, int low, int high) {
    int pivot = arr[high]; // 选择最后一个元素作为基准
    int i = low - 1;       // i 表示小于 pivot 的元素的索引

    for (int j = low; j < high; j++) {
        if (arr[j] <= pivot) {
            i++; // 增加小于 pivot 的元素的索引
            swap(arr[i], arr[j]); // 交换
        }
    }
    swap(arr[i + 1], arr[high]); // 将 pivot 放到正确的位置
    return i + 1; // 返回 pivot 的最终位置
}

// 快速排序函数
void quickSort(vector<int>& arr, int low, int high) {
    if (low < high) {
        int pi = partition(arr, low, high); // 分区索引
        quickSort(arr, low, pi - 1);        // 递归排序左子数组
        quickSort(arr, pi + 1, high);       // 递归排序右子数组
    }
}

int main() {
    vector<int> arr = {10, 7, 8, 9, 1, 5};
    int n = arr.size();

    cout << "原始数组: ";
    for (int x : arr) cout << x << " ";
    cout << endl;

    quickSort(arr, 0, n - 1);

    cout << "排序后的数组: ";
    for (int x : arr) cout << x << " ";
    cout << endl;

    return 0;
}

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;