7-12 排序
给定N个(长整型范围内的)整数,要求输出从小到大排序后的结果。
本题旨在测试各种不同的排序算法在各种数据情况下的表现。各组测试数据特点如下:
- 数据1:只有1个元素;
- 数据2:11个不相同的整数,测试基本正确性;
- 数据3:103个随机整数;
- 数据4:104个随机整数;
- 数据5:105个随机整数;
- 数据6:105个顺序整数;
- 数据7:105个逆序整数;
- 数据8:105个基本有序的整数;
- 数据9:105个随机正整数,每个数字不超过1000。
输入格式:
输入第一行给出正整数N(≤105),随后一行给出N个(长整型范围内的)整数,其间以空格分隔。
输出格式:
在一行中输出从小到大排序后的结果,数字间以1个空格分隔,行末不得有多余空格。
输入样例:
1 2 | 11 4 981 10 -17 0 -20 29 50 8 43 -5 |
输出样例:
1 | -20 -17 -5 0 4 8 10 29 43 50 981 |
代码:
快速排序算法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | #include<bits/stdc++.h> using namespace std; int n; int a[100005]; int Partition( int left, int right) //确定枢轴的位置 { int tmp = a[left]; while (left!=right) { while (left<right&&a[right]>=tmp)right--; a[left] = a[right]; while (left<right&&a[left]<=tmp)left++; a[right] = a[left]; } a[left] = tmp; return left; } void QuickSort( int left, int right){ if (left<right){ int pos=Partition(left, right); QuickSort(left, pos-1); QuickSort(pos+1, right); } } int main(){ //快速排序 scanf( "%d" ,&n); for ( int i=1;i<=n;i++){ scanf( "%d" ,&a[i]); } QuickSort(1, n); for ( int i=1;i<=n;i++){ printf( "%d" ,a[i]); if (i!=n)printf( " " ); } return 0; } |
c++库提供的sort()函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <iostream> #include <cstdio> #include <algorithm> using namespace std; int a[100005]; int main() { int n; scanf( "%d" , &n); // input for ( int i = 0; i < n; i++) scanf( "%d" , &a[i]); <strong>sort(a, a+n); // sort注意下标是从0开始的,若下标从1开始,则是sort(a+1,a+n+1)</strong> printf( "%d" , a[0]); // output for ( int i = 1; i < n; i++) printf( " %d" , a[i]); return 0; } |
C++ STL 标准库中的 sort() 函数,本质就是一个模板函数。正如表 1 中描述的,该函数专门用来对容器或普通数组中指定范围内的元素进行排序,排序规则默认以元素值的大小做升序排序,除此之外我们也可以选择标准库提供的其它排序规则(比如std::greater<T>
降序排序规则),甚至还可以自定义排序规则。
sort() 函数是基于快速排序实现的,有关快速排序的具体实现过程,感兴趣的读者可阅读《快速排序(QSort,快排)算法》一文。
需要注意的是,sort() 函数受到底层实现方式的限制,它仅适用于普通数组和部分类型的容器。换句话说,只有普通数组和具备以下条件的容器,才能使用 sort() 函数:
- 容器支持的迭代器类型必须为随机访问迭代器。这意味着,sort() 只对 array、vector、deque 这 3 个容器提供支持。
- 如果对容器中指定区域的元素做默认升序排序,则元素类型必须支持
<
小于运算符;同样,如果选用标准库提供的其它排序规则,元素类型也必须支持该规则底层实现所用的比较运算符; - sort() 函数在实现排序时,需要交换容器中元素的存储位置。这种情况下,如果容器中存储的是自定义的类对象,则该类的内部必须提供移动构造函数和移动赋值运算符。
总结:

在计算机科学中,一个原地算法(in-place algorithm)基本上不需要额外辅助的数据结构,然而,允许少量额外的辅助变量来转换数据的算法。当算法运行时,输入的数据通常会被要输出的部分覆盖掉。不是原地算法有时候称为非原地(not-in-place)或不得其所(out-of-place)。–摘自维基百科。
not an in place sort algorithm:基数排序、归并排序
in place sort algorithm : 插入排序、选择排序、堆排序、快速排序
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现