1. 程式人生 > >BASIC-13 數列排序

BASIC-13 數列排序

題目
問題描述
  給定一個長度為n的數列,將這個數列按從小到大的順序排列。1<=n<=200
輸入格式
  第一行為一個整數n。
  第二行包含n個整數,為待排序的數,每個整數的絕對值小於10000。
輸出格式
  輸出一行,按從小到大的順序輸出排序後的數列。
樣例輸入
5
8 3 6 4 9
樣例輸出
3 4 6 8 9

解題一:
用系統內建快速排序;sort函式排序 再迴圈輸出

#include<cstdio>
#include<algorithm> 
#include<iostream>
using namespace std;
int
main() { int n; int a[200]; cin>>n; for(int i=0;i<n;i++) cin>>a[i]; sort(a,a+n); for(int i=0;i<n;i++) printf("%d ",a[i]); return 0; }

題解二:
採用插入排序

#include<iostream>
using namespace std;
void Sort(int *a,int n)
{	//插入排序 
	int i,j,temp,k;
	for(i=1;i<n;i++)
	{
		temp =
a[i]; for(j=i-1;j>=0&&a[j]>temp;j--) { a[j+1] = a[j]; } a[j+1] = temp; } } int main() { int n,*a; cin>>n; a = new int[n]; for(int i=0;i<n;i++) { cin>>*(a+i); } Sort(a,n); for(int i=0;i<n;i++) { cout<<*(a+i)<<" "; } delete [] a; }

題解三:
採用氣泡排序

#include<stdio.h>
int main()
{
	unsigned int n,i,j,t;
	scanf("%d",&n);
	int P[n];
	for(i=0;i<=n-1;i++)
	{
		scanf("%d",&P[i]);
	}
	for(j=n;j>=1;j--)
	{
		for(i=0;i<j-1;i++)
		if(P[i]>P[i+1])
		{
			t=P[i+1];
			P[i+1]=P[i];
			P[i]=t;
		}
	}
		for(i=0;i<=n-1;i++)	
		{
		printf("%d",P[i]);
		printf(" ");
		}
	return 0;
}