排序

题目描述 Description

给出n和n个整数,希望你从小到大给他们排序

输入描述 Input Description

第一行一个正整数n

 

第二行n个用空格隔开的整数

输出描述 Output Description

输出仅一行,从小到大输出n个用空格隔开的整数

样例输入 Sample Input

3

3 1 2

样例输出 Sample Output

1 2 3

数据范围及提示 Data Size & Hint

1<=n<=100000



<pre name="code" class="cpp">//冒泡排序法
#include <iostream>
using namespace std;
int main()

{
	int n,i,j,temp,flag=1;
	cin>>n;
	int *array=new int[n];
	for(i=0;i<n;i++)
	{
		cin>>array[i];
	}
	for(j=0;j<n-1;j++)
	{
		for(i=0;i<n-1-j;i++)
		{
			if(array[i]>array[i+1])
			{
				temp=array[i];
				array[i]=array[i+1];
				array[i+1]=temp;
				flag=0;
			}
		}
		if(flag)
			break;
	}
	for(i=0;i<n;i++)
		cout<<array[i]<<" ";

	cout<<endl;
	delete array;
	return 0;
}



//快速排序算法
//快速排序采用的是分治法,其平均时间复杂度为O(nlogn)
//一趟快速排序的算法是[1]:
 // 1)设置两个变量I、J,排序开始的时候:I=0,J=N-1;
 // 2)以第一个数组元素作为关键数据,赋值给key,即 key=A[0];
  //3)从J开始向前搜索,即由后开始向前搜索(J=J-1即J--),找到第一个小于key的值A[j],A[j]与A[i]交换;
  //4)从I开始向后搜索,即由前开始向后搜索(I=I+1即I++),找到第一个大于key的A[i],A[i]与A[j]交换;
  //5)重复第3、4、5步,直到 I=J; (3,4步是在程序中没找到时候j=j-1,i=i+1,直至找到为止。找到并交换的时候i, j指针位置不变。另外当i=j这过程一定正好是i+或j-完成的最后另循环结束。)	
/*
作者:huangyula
题目:p1076 排序
*/
#include <iostream>
using namespace std;
void quick_sort(int a[],int left,int right)
{
	if(left<right)
	{
		int i=left;
		int j=right;
		int x=a[i];
		while(i<j)
		{
			while(i<j&&a[j]>x)
				j--;
			if(i<j){
				a[i]=a[j];
				i++;
			}
			while(i<j&&a[i]<x)
				i++;
			if(i<j)
			{
				a[j]=a[i];
				j--;
			}
		}
		a[i]=x;
		quick_sort(a,left,i-1);
		quick_sort(a,i+1,right);
	}
}
int main()

{
	int n,k;
	cin>>n;
	int *a=new int[n];
	for(k=0;k<n;k++)
		cin>>a[k];
	quick_sort(a,0,n-1);
	for(k=0;k<n;k++)
	{
		cout<<a[k]<<" ";
	}
	cout<<endl;
	delete a;
	return 0;
}

	



 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值