基础练习01 数列排序
问题描述
给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200
输入格式
第一行为一个整数n。
第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。
第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。
输出格式
输出一行,按从小到大的顺序输出排序后的数列。
样例输入
5
8 3 6 4 9
8 3 6 4 9
样例输出
3 4 6 8 9
#include<iostream> #include<vector> using namespace std; // 快速排序(从小到大) void quickSort(int left, int right, vector<int>& arr) { if(left >= right) return; int i, j, base; i = left, j = right; base = arr[left]; // 取最左边的数为基准数 while (i < j) { while (arr[j] >= base && i < j) j--; while (arr[i] <= base && i < j) i++; if(i < j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } // 基准数归位 arr[left] = arr[i]; arr[i] = base; // 递归左边 quickSort(left, i-1, arr); // 递归右边 quickSort(i+1, right, arr); } int main(){ int n; cin >> n; vector<int> a(n); // 数据读入 for(int i=0; i<n; ++i){ cin >> a[i]; } // 快排 quickSort(0, n-1, a); // 数据输出 for(int i=0; i<n; ++i){ cout << a[i]; if(i != n-1){ cout<< " "; } } }
个人总结:
这个题考察排序算法,本来是想用冒泡做的,但是想想不能老用冒泡(自己只会写冒泡)吧,而且时间复杂度较高。这个题用的快排做的,emmm,对,看了好多别人的资料O(∩_∩)O哈哈~,之前数据结构老师教的全还回去了。(>人<)
知识拓展:
快速排序:简单点说就是 在一组数中选定一个数为基数进行一次简单排序,使得 基数左边的数都比基数小(大)基数右边的数都比基数大(小),然后采用分治的思想,对基数左右边两序列进行递归操作,最终使得整个序列有序。需要注意的是,如果是从左方选取基数,应从右方进行搜索;若从右方选取的基数,则从左方进行搜索。
附个大佬讲解快排的博文:https://blog.csdn.net/qq_28584889/article/details/88136498