王道第一题:排序
程序员文章站
2022-05-16 21:58:59
...
题目描述
对输入的n个数进行排序并输出。
输入描述:
输入的第一行包括一个整数n(1<=n<=100)。
接下来的一行包括n个整数。
输出描述
能有多组测试数据,对于每组数据,将排序后的n个整数输出,每个数后面都有一个空格。
每组测试数据的结果占一行。
示例
输入
4
1 4 3 2
输出
1 2 3 4
时间限制:1秒 空间限制:65536K
解法一:Bubble sort 冒泡排序
直接上代码
#include <iostream>
using namespace std;
int main(int argc, const char * argv[]) {
/*
王道第一题
冒泡排序来解决此题
*/
int number;
while(cin>>number){ //用while来保证多组数据的成功测试
int arr[number];
for(int i=0;i<number;i++){
cin >> arr[i];
}
bool flag = true; //给定flag,减少判定次数
int temp;
for(int i=0;i<number-1&&flag==true;i++){
flag = false;
for(int j=0;j<number-i-1;j++){
if(arr[j]>arr[j+1]){
flag = true; //交换
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
for(int i=0;i<number;i++){ //输出格式要正确
cout << arr[i]<<" ";
}
cout << "\n";
}
}
因为时间限制和空间限制要求不是很高,所以冒泡排序可以很好地完成任务
解法二:Quick sort 快速排序
/*
quickSort
*/
#include<iostream>
using namespace std;
int Partition(int arr[], int low, int high){
//对数组进行排序
int pivotkey = arr[low];
while(low<high){
//小的向左移,大的向右移
while(low<high&&arr[high]>=pivotkey) high--;
arr[low] = arr[high];
while(low<high&&arr[low]<=pivotkey) low++;
arr[high] = arr[low];
}
arr[low] = pivotkey;
return low;
}
void quickSort(int arr[], int low, int high){
//选定排序的数组
int pivotloc;
if(low<high){
pivotloc = Partition(arr, low, high);
quickSort(arr, low, pivotloc-1);
quickSort(arr, pivotloc+1, high);
}
}
int main(){
int number;
while(cin>>number){
int arr[number];
for(int i=0;i<number;i++){
cin >> arr[i];
}
quickSort(arr, 0, number-1);
for(int i=0;i<number;i++){
cout << arr[i]<<" ";
}
cout << "\n";
}
}
因为数据量很小,故冒泡排序根快排序比较不出差别。
上一篇: 西交软院考研经验
下一篇: 杭电2010复试上机真题
推荐阅读
-
PHP 数组学习排序全接触第1/2页
-
php 数组操作(增加,删除,查询,排序)等函数说明第1/2页
-
九章算法 | Amazon 面试题:排序矩阵中的从小到大第k个数
-
[每日一题] 97. 删除排序数组中的重复项(数组、unique去重、distance函数、泛型算法)
-
LeetCode 探索 初级算法 数组 第一题:删除排序数组中的重复项
-
蓝桥杯python每日一题——数列排序
-
寒假每日一题day9 AcWing 429. 奖学金(结构体排序)
-
倪文迪陪你学蓝桥杯2021寒假每日一题:1.14日(2018省赛A组第2题)
-
在未排序的数组中找到第 k 个最大的元素
-
MIT算法导论公开课之第5课 线性时间排序