蓝桥杯 快速排序 C++算法提高 HERODING的蓝桥杯之路

资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
  用递归来实现快速排序(quick sort)算法。快速排序算法的基本思路是:假设要对一个数组a进行排序,且a[0] = x。首先对数组中的元素进行调整,使x放在正确的位置上。同时,所有比x小的数都位于它的左边,所有比x大的数都位于它的右边。然后对于左、右两段区域,递归地调用快速排序算法来进行排序。
  输入格式:输入只有一行,包括若干个整数(不超过10个),以0结尾。
  输出格式:输出只有一行,即排序以后的结果(不包括末尾的0)。
输入输出样例
样例输入
5 2 6 1 7 3 4 0
样例输出
1 2 3 4 5 6 7

解题思路:
解决这道题最重要的是理解快速排序的过程,菜鸟教程上有该算法的详细的步骤https://www.runoob.com/w3cnote/quick-sort.html,本质就是不断填坑,首先将最左边的数挖出,然后从最右边开始向左找比挖出来的数小的填上去,然后再从左边向右找到比初始坑大的数填到刚才挖的坑,反复直到相遇,然后在各自的区间再重复做这样的事情,代码如下:

#include<bits/stdc++.h>

using namespace std;

int a[10];

void quick_sort(int s[], int l, int r){
	if(l < r){
		int i = l;
		int j = r;
		int x = s[l];
		while(i < j){
			while(i < j && a[j] >= x){
				j --;
			}
			if(i < j){
				s[i ++] = s[j];
			}
			while(i < j && a[i] < x){
				i ++;
			}
			if(i < j){
				s[j --] = s[i];
			}
		}	
		s[i] = x;
		quick_sort(s, l, i - 1);
		quick_sort(s, i + 1, r);
	}
} 

int main(){
	int index = 0;
	int num;
	while(1){
		cin >> num;
		if(num == 0){
			break;
		}
		a[index ++] = num;
	}
	quick_sort(a, 0, index - 1);
	for(int i = 0; i < index; i ++){
		cout << a[i] << " ";
	}	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/HERODING23/article/details/107603616