排序篇

一、桶排序

桶排序:就是将相同元素放入一个数组,之后输出 

#include<bits/stdc++.h>
using namespace std;
int main(void)
{
	int a[10]={0},t,i;
	for(i=0;i<5;i++)
	{
		scanf("%d",&t);
		a[t]++;
	}
	for(i=0;i<10;i++)
	{
		while(a[i]) printf("%d ",i),a[i]--;
	}
	return 0;
}
/*
测试数据: 
3 2 4 3 5*/

二、冒泡排序

复杂度O(N^2)

//冒泡排序
#include<bits/stdc++.h>
using namespace std;
int a[10];
int main(void)
{
	int n,i,j;
	scanf("%d",&n);
	for(i=0;i<n;i++) 
	scanf("%d",&a[i]);
	for(i=0;i<n-1;i++)
	{
		for(j=i+1;j<n;j++)
		{
			if(a[i]>a[j]) //从小到大 
			{
				int t=a[i];
				a[i]=a[j];
				a[j]=t;
			}
		}
	}
	for(i=0;i<n;i++)
	printf("%d ",a[i]);
	return 0; 
} 

/*测试数据: 
6
6 2 4 1 5 3
*/

三、快速排序

方法:找到一个基点,将小于基准点的数全部放到左边,大于基准点的数全部放到右边。

//快速排序
#include<bits/stdc++.h>
using namespace std;
int a[20];
void quick_sort(int l,int r)
{
	if(l>r) return ;
	int temp,i,j;
	temp=a[l]; //temp是基准数 
	i=l;
	j=r;
	while(i!=j)
	{
		while(temp<=a[j]&&i<j) j--; //先从右向左遍历 
		while(temp>=a[i]&&i<j) i++; //再从左向右遍历 
		if(i<j) swap(a[i],a[j]);
	}
	a[l]=a[i]; //最终基准数归位 
	a[i]=temp; 
	quick_sort(l,i-1); //递归处理左边的 
	quick_sort(i+1,r); //递归处理右边的 
}
int main(void)
{
	int n,i;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	scanf("%d",&a[i]);
	quick_sort(1,n);
	for(i=1;i<=n;i++)
	printf("%d ",a[i]);
	return 0;
}
/*输入样例: 
10
6  1  2  7  9  3  4  5  10  8 
*/ 

猜你喜欢

转载自blog.csdn.net/qq_41829060/article/details/81365031
今日推荐