排序问题
来源:互联网 发布:制作简谱软件 编辑:程序博客网 时间:2024/06/03 09:26
题目描述 Description
第一行一个正整数n
第二行n个用空格隔开的整数
输出描述 Output Description
3
1 2 3
数据范围及提示 Data Size & Hint
ps:如有错误,欢迎指出
给出n和n个整数,希望你从小到大给他们排序
第一行一个正整数n
第二行n个用空格隔开的整数
输出描述 Output Description
输出仅一行,从小到大输出n个用空格隔开的整数
3
3 1 2
1 2 3
数据范围及提示 Data Size & Hint
1<=n<=100000
(自己写的冒泡,和优化的快排死活都超时,直接用c++标准库里面的sort()就通过了 OTL)
直接用标准库的代码:
#include <iostream>#include <algorithm>using namespace std;int main(){ int n; cin >> n; int * ar = new int[n]; for (int i = 0; i < n; i++) cin >> ar[i]; sort(ar, ar+n); for (int i = 0; i < n; i++) cout << ar[i] << " "; return 0;}
手写的快速排序和直接插入排序(超时):
#include <iostream>using namespace std;const int MAX_LENGTH_INSERT_SORT = 7; // 数组小于等于7等用直接插入排序,大于7用快速排序void QuickSort(int ar[], int n);void QSort(int ar[], int low, int high); int Partition(int ar[], int low, int high);void Swap(int & a, int & b);void InsertSort(int ar[], int n); //插入排序int main(){ int n; cin >> n; int * ar = new int[n + 1]; for (int i = 1; i <= n; i++) cin >> ar[i]; QuickSort(ar, n); for (int i = 1; i <= n; i++) cout << ar[i] << " "; return 0;}void QuickSort(int ar[], int n){ QSort(ar, 1, n);}void QSort(int ar[], int low, int high){ int pivot; if ((high - low) > MAX_LENGTH_INSERT_SORT) { while (low < high) { pivot = Partition(ar, low, high); // 计算枢轴值 QSort(ar, low, pivot - 1); //对低子表进行递归排序 low = pivot + 1;<span style="white-space:pre"></span>//末尾递归 } } else InsertSort(ar, high);}int Partition(int ar[], int low, int high){ int pivotkey; int m = low + ( high - low) / 2; if (ar[low] > ar[high]) Swap(ar[low], ar[high]); if (ar[m] > ar[high]) Swap(ar[m], ar[high]); if (ar[m] > ar[low]) Swap(ar[m], ar[low]); // 三数取中法 pivotkey = ar[low]; ar[0] = pivotkey; while (low < high) { while (low < high && ar[high] >= pivotkey) high--; ar[low] = ar[high]; while(low < high && ar[low] <= pivotkey) low++; ar[high] = ar[low]; } ar[low] = ar[0]; return low;}void InsertSort(int ar[], int n){ int j; for (int i = 2; i <= n; i++) { if (ar[i] < ar[i-1]) { ar[0] = ar[i]; for (j = i - 1; ar[j] > ar[0]; j--) ar[j+1] = ar[j]; ar[j+1] = ar[0]; } }}void Swap(int & a, int & b){ int temp; temp = a; a = b; b = temp;}
#include <iostream>using namespace std;int main(){ int n; cin >> n; int * ar = new int[n]; for (int i = 0; i < n; i++) cin >> ar[i]; bool flag = true; int temp; for (int i = 0; i < n && flag; i++) { flag = false; for (int j = n - 2; j >= i; j--) { if (ar[j] > ar[j+1]) { temp = ar[j]; ar[j] = ar[j+1]; ar[j+1] = temp; flag = true; } } } for (int i = 0; i < n; i++) cout << ar[i] << " "; return 0;}
ps:如有错误,欢迎指出
0 0
- 排序问题-归并排序
- 排序问题-快速排序
- 【排序问题】选择排序
- 排序问题
- 排序 问题
- 排序问题
- 排序问题~~
- 排序问题
- 排序问题
- 排序问题
- 排序问题
- 排序问题
- 排序问题
- 排序 问题
- 排序问题
- 排序问题
- 排序问题
- 排序问题
- 南京邮电大学OJ——1062直接插入排序
- mysql 全部备份的shell脚本
- 检测SOCKET是否断开
- 图像分割方法概述
- USACO 2.1.5 Hamming Code
- 排序问题
- android上传图片至服务器
- 简单插入排序
- 使用sqoop1导出mysql数据到hbase中
- eclipse创建android项目点击finish没反应
- 算法复杂度
- Join Optimization in Apache Hive
- 互联网协议以及网络分层
- Linux 0.12 switch_to切换过程