排序(冒泡,快排,归并)
Posted zwx7616
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序(冒泡,快排,归并)相关的知识,希望对你有一定的参考价值。
一,冒泡排序(n^2)
for(int i=2;i<=n;i++)j在前,i在后 for(int j=1;j<=n-i;j++) if(a[j]<a[i]) swap(a[i],a[j]);
二:快速排序(n*logn~n^2)
#include<iostream> using namespace std; int a[(int)1e5+5]; void quick_sort(int q[],int l,int r)//先排序再递归 if(l>=r)return; int x=q[l],i=l-1,j=r+1; while(i<j) do i++;while(q[i]<x); do j--;while(q[j]>x); if(i<j) swap(q[i],q[j]); quick_sort(a,l,j); quick_sort(a,j+1,r); int main () int n; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; quick_sort(a,1,n); for(int i=1;i<=n;i++) cout<<a[i]<<‘ ‘; return 0;
三:归并排序(nlogn)
#include<iostream> using namespace std; int a[(int)1e5+5],tmp[(int)1e5+5]; void merge_sort(int q[],int l,int r) if(l>=r)return ; int mid=l+r>>1; merge_sort(q,l,mid),merge_sort(q,mid+1,r); int k=0,i=l,j=mid+1; while(i<=mid&&j<=r) if(q[i]<q[j])tmp[k++]=q[i++]; else tmp[k++]=q[j++]; while(i<=mid)tmp[k++]=q[i++]; while(j<=r)tmp[k++]=q[j++]; for(int i=l,j=0;i<=r;j++,i++)q[i]=tmp[j];//容易出错,tmp数组的范围是从0开始,而q是从l到r int main() int n; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; merge_sort(a,1,n); for(int i=1;i<=n;i++) cout<<a[i]<<‘ ‘; return 0;
以上是关于排序(冒泡,快排,归并)的主要内容,如果未能解决你的问题,请参考以下文章
八大排序算法C语言过程图解+代码实现(插入,希尔,选择,堆排,冒泡,快排,归并,计数)