分治算法——快速排序

任务:对数组进行排序(快速排序或归并排序二选一)

1)快速排序:定义一个数组,使用快速排序算法将其中的元素按照从小到大的顺序进行排序。

算法输出:排好序的数组

2)归并排序:定义一个数组,使用快速排序算法将其中的元素按照从小到大的顺序进行排序。

算法输出:排好序的数组

#include<iostream>
using namespace std;

void kuaipai( int arr[], int low, int high ){
	//若带排序序列只有一个元素,返回空 
	if (high <= low) return;
	int i = low;//i,j作为指针 
    int j = high;
    //定一个数基准数为基准数,一般为第一个(底下定的就是第一个数) 
    int key = arr[low];
    while (i<j)
    {
        /*从右向左找比key小的值*/
        while (arr[j] >= key && i<j)
        {
            j--;
        }
        //找到后,将key赋值给j指针指向位置, 右边指针指向位置变为key
		arr[i]=arr[j];
        /*从左向右找比key大的值*/
        while (arr[i] <= key && i<j)
        {
            i++;
        }
        //找到后,将key赋值给i指针指向位置, 左边边指针指向位置变为key
        arr[j]=arr[i];
    }
    if(i>=j){
    	arr[i]=key;
	}
    kuaipai(arr, low, i - 1);
    kuaipai(arr, i + 1, high);
} 

int main()
{
    int a[] = {57, 68, 59, 52, 72, 28, 96, 33, 24};
 /* sizeof(a) / sizeof(a[0])计算数组长度,这里也可以用end()-begin()来进行数组长度计算*/ 
 	int length=sizeof(a) / sizeof(a[0]);
    kuaipai(a, 0,  length- 1);/*这里原文第三个参数要减1否则内存越界*/
 
    for(int i = 0; i < length; i++)
        {
        cout << a[i] << " ";
    }
     
    return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值