
排序
ComBoat
俺好菜呀o(╥﹏╥)o
展开
-
堆排序
#include<iostream> using namespace std; void minheap_fixdown(int *a,int i,int n) { int left=2*i+1; int right=2*i+2; if(left>=n) return; int min=left; if(right<n) if(a[right]<a[left]) min=right; if(a[i]<a[min]) return; els原创 2021-02-27 21:13:00 · 100 阅读 · 0 评论 -
计数排序
定义一个辅助数组,待排数组中的数每出现一次,则将辅助数组中的数加1 时间复杂度O(n+k) #include<iostream> #include<cstring> using namespace std; int b[1000001]; void CountSort(int *a,int n) { int ans=0; memset(b,0,sizeof(b)); for(int i=0;i<n;i++) { b[a[i]]++; ans=max(ans原创 2021-02-09 09:06:00 · 79 阅读 · 0 评论 -
快速排序
从待排数组中选出一个数,将小于它的放到一边,大于它的放到另一边,再对这两边分别进行快速排序,持续递归,直到排序的只剩一个元素 时间复杂度O(nlogn) 单向扫描 #include<iostream> using namespace std; int partition(int *a,int l,int r) { int pivot=a[l]; int left=l+1; int right=r; while(left<=right) { if(a[left]<=原创 2021-02-08 18:41:17 · 96 阅读 · 0 评论 -
归并排序
先将前半部分排序,再将后半部分排序,最后将两部分合并 递归实现,直到一部分只有一个元素 时间复杂度O(nlogn) 代码 #include<iostream> using namespace std; int temp[100]; void merge(int *a,int left,int mid,int right) { for(int i=left;i<=right;i++) temp[i]=a[i]; //先将a整体赋给temp int l=left,r=原创 2021-02-08 18:03:40 · 123 阅读 · 1 评论 -
希尔排序
希尔排序是插入排序的改进版本,调整了插入排序的增量 平均时间复杂度O(n^1.3) 代码 #include<iostream> using namespace std; int ShellSort(int *a,int n) { for(int len=n/2;len>0;len/=2) { for(int i=len;i<n;i++) { int j; int temp=a[i]; for(j=i-len;j>=0&&temp&原创 2021-02-08 17:51:44 · 85 阅读 · 0 评论 -
插入排序
从第二个元素开始一次向前插入 时间复杂度O(n^2) 代码 #include<iostream> using namespace std; void InsertSort(int *a,int n) { for(int i=1;i<n;i++) { int temp=a[i]; int j=0; for(j=i-1;j>=0&&temp<a[j];j--) a[j+1]=a[j]; a[j+1]=temp; } }原创 2021-02-08 17:44:30 · 80 阅读 · 0 评论 -
冒泡排序
每次遍历将大的数下沉 时间复杂度哦(n^2) 代码 #include<iostream> using namespace std; void BubbleSort(int a[],int n) { int work; for(int i=0;i<n-1;i++) { work=0; for(int j=0;j<n-1-i;j++) { if(a[j]>a[j+1]) { int temp=a[j]; a[j]=a[j+1];原创 2021-02-08 17:39:40 · 78 阅读 · 0 评论 -
选择排序
每次遍历,寻找最小元素下标,和此次遍历的首元素交换 时间复杂度O(n^2) 代码 #include<iostream> using namespace std; void SelectSort(int a[],int n) { for(int i=0;i<n-1;i++) { int index=i; for(int j=i+1;j<=n-1;j++) { if(a[j]<a[index]) index=j; } int temp=a[i原创 2021-02-08 17:37:36 · 81 阅读 · 0 评论