当前位置: 首页 > article >正文

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;
}


http://www.kler.cn/a/408681.html

相关文章:

  • 前端速通(CSS)
  • 标贝科技大模型声音复刻 快速获取高品质专属AI声音
  • 无线电磁波在自由空间的衰减
  • cangjie (仓颉) vscode环境搭建
  • 【Linux】安装cuda
  • YOLOv11融合[NeurlS2022]递归门控卷积gnconv模块及相关改进思路
  • VRRP虚拟路由实现主备设备负载分担
  • 在Spring Boot项目中集成RabbitMQ消息中间件
  • JSON 性能测试 - WastJson 性能也很快
  • 基于LiteFlow的风控系统指标版本控制
  • ApiChain 从迭代测试用例到项目回归测试 核心使用教程
  • 知乎日报——第二周
  • 乐鑫ESP32物联网方案,设备人机交互技术应用,启明云端乐鑫代理商
  • Java连接MySQL数据库进行增删改查操作
  • Flink-Source的使用
  • (二)手势识别——动作模型训练【代码+数据集+python环境(免安装)+GUI系统】
  • -Dspring.profiles.active=dev与--spring.profiles.active=dev的区别
  • 默语博主的推荐:探索技术世界的旅程
  • 8、深入剖析PyTorch的state_dict、parameters、modules源码
  • GCC编译过程(预处理,编译,汇编,链接)及GCC命令
  • 如果在docker 容器中安装ros遇到的问题
  • 《MySQL 事务隔离级别详解》
  • 学习Servlet(Servlet实现方式3)
  • Knife4j快速入门
  • 【redis】哈希类型详解
  • 【pip install报SSL类错误】