博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
很多很多排序(未完待更 每天佛系更新)
阅读量:4463 次
发布时间:2019-06-08

本文共 4471 字,大约阅读时间需要 14 分钟。

1.冒泡排序

这个写法是先把小的数字排出来然后再排出来大的数字

代码:

#include 
using namespace std;const int maxn = 1e5 + 10;int n;int num[maxn];void BubbleSort(int L, int R) { for(int i = L; i <= R; i ++) { int flag = 0; for(int j = R; j > i; j --) { if(num[j] < num[j - 1]) { swap(num[j], num[j - 1]); flag = 1; } } if(!flag) break; }}int main() { scanf("%d", &n); for(int i = 0; i < n; i ++) scanf("%d", &num[i]); BubbleSort(0, n - 1); for(int i = 0; i < n; i ++) { printf("%d", num[i]); printf("%s", i != n - 1 ? " " : "\n"); } return 0;}
View Code

2.插入排序

从前向后依次把每一个 $num[i]$ 插入到正确的位置

 代码:

#include 
using namespace std;const int maxn = 1e5 + 10;int n;int num[maxn];void InsertSort(int L, int R) { for(int i = L; i <= R; i ++) { for(int j = i; j > L; j --) { if(num[j] < num[j - 1]) swap(num[j], num[j - 1]); else break; } }}int main() { scanf("%d", &n); for(int i = 0; i < n; i ++) scanf("%d", &num[i]); InsertSort(0, n - 1); for(int i = 0; i < n; i ++) { printf("%d", num[i]); printf("%s", i != n - 1 ? " " : "\n"); } return 0;}
View Code

3.选择排序

每次在上一次排好剩下的元素李选最小的排出来

代码:

#include 
using namespace std;const int maxn = 1e5 + 10;int n;int num[maxn];void SelectSort(int L, int R) { for(int i = L; i < R; i ++) { int minn = num[i]; int temp = i; for(int j = i + 1; j <= R; j ++) { if(num[j] < minn) { minn = num[j]; temp = j; } } swap(num[i], num[temp]); }}int main() { scanf("%d", &n); for(int i = 0; i < n; i ++) scanf("%d", &num[i]); SelectSort(0, n - 1); for(int i = 0; i < n; i ++) { printf("%d", num[i]); printf("%s", i != n - 1 ? " " : "\n"); } return 0;}
View Code

 4.归并排序

中间分两段 两端分别拍好之后再合并

代码:

#include 
using namespace std;const int maxn = 1e5 + 10;int N;int a[maxn], b[maxn];void MergeSort(int L, int R) { if(L == R) return ; int mid = (R - L) / 2 + L; MergeSort(L, mid); MergeSort(mid + 1, R); int p1 = L, p2 = mid + 1, k = 0; while(p1 <= mid || p2 <= R) { if(p1 <= mid && p2 > R) b[k ++] = a[p1 ++]; else if(p1 > mid && p2 <= R) b[k ++] = a[p2 ++]; else { if(a[p1] < a[p2]) b[k ++] = a[p1 ++]; else b[k ++] = a[p2 ++]; } } for(int i = L; i <= R; i ++) a[i] = b[i - L];}int main() { scanf("%d", &N); for(int i = 0; i < N; i ++) scanf("%d", &a[i]); MergeSort(0, N - 1); for(int i = 0; i < N; i ++) { printf("%d", a[i]); printf("%s", i != N - 1 ? " " : "\n"); } return 0;}
View Code

 

5.堆排序

用 Insert 函数把数组放到一个最小堆里面 然后用 Get 函数不断得到最小值

#include 
using namespace std;const int maxn = 1e5 + 10;int T, N;int a[maxn];class Heap{private: int heap_[maxn]; int sz_;public: Heap() { sz_ = 0; } void Insert(int x) { sz_ ++; heap_[sz_] = x; int id = sz_; while(id > 1) { if(heap_[id] < heap_[id / 2]) { swap(heap_[id], heap_[id / 2]); id /= 2; } else break; } } int Get() { int res = heap_[1]; heap_[1] = heap_[sz_]; sz_ --; int id = 1; while(id <= sz_) { if(id * 2 > sz_) break; int minn = heap_[id * 2]; if(id * 2 + 1 <= sz_ && heap_[id * 2 + 1] < heap_[id * 2]) minn = heap_[id * 2 + 1]; if(heap_[id] < minn) break; int to; if(minn == heap_[id * 2]) to = id * 2; else to = id * 2 + 1; swap(heap_[id], heap_[to]); id = to; } return res; }};void HeapSort(int L, int R) { Heap heap; for(int i = L; i <= R; i ++) heap.Insert(a[i]); for(int i = L; i <= R; i ++) a[i] = heap.Get();}int main() { scanf("%d", &T); while(T --) { scanf("%d", &N); for(int i = 1; i <= N; i ++) scanf("%d", &a[i]); HeapSort(1, N); for(int i = 1; i <= N; i ++) { printf("%d", a[i]); printf("%s", i != N ? " " : "\n"); } } return 0;}
View Code

 

转载于:https://www.cnblogs.com/zlrrrr/p/10040496.html

你可能感兴趣的文章
Palindromes _easy version
查看>>
vue 小记
查看>>
CURRICULUM VITAE
查看>>
菱形缓冲器电路
查看>>
Groovy 程序结构
查看>>
使用 WordPress 的导航菜单
查看>>
input只能输入数字和小数点,并且只能保留小数点后两位 - CSDN博客
查看>>
js 不固定传参
查看>>
远程调试UWP遇到新错误Could not generate the root folder for app package ......
查看>>
[倍增][最短路-Floyd][dp]
查看>>
SpringAOP用到了什么代理,以及动态代理与静态代理的区别
查看>>
利用STM32CubeMX来生成USB_HID_Mouse工程【添加ADC】(1)
查看>>
【leetcode】Populating Next Right Pointers in Each Node
查看>>
获取请求参数乱码的问题
查看>>
代码实现:判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称...
查看>>
Android客户端测试点
查看>>
Jquery:怎样让子窗体的div显示在父窗体之上
查看>>
01概率
查看>>
Shell脚本
查看>>
MatLab Load cv::Mat 导入数据
查看>>