其实贴这道题目是为了给新手介绍一下这几个简单排序方法;
首先我们看一下选择排序,思路很简单,就是从第一个开始每次定位一个数,和数组中最大(最小)的数交换一下位置;
不过这是个不稳定排序算法;
#include<stdio.h> int a[1005]; // 交换函数; void Swap(int &a,int &b) { int temp=a; a=b; b=temp; } int main() { int n,t; scanf("%d",&t); while(t--){ scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&a[i]); for(int i=0;i<n;i++){ // 选择排序; for(int j=i+1;j<n;j++){ if(a[i]>a[j]) Swap(a[i],a[j]); } } for(int i=0;i<n-1;i++) printf("%d ",a[i]); printf("%d\n",a[n-1]); } return 0; }
恩,现在我们再看一下冒泡排序;
冒泡冒泡,顾名思义,跟鱼吐泡泡似的,越靠近水面越大;从第一个开始一次比较相邻两个数的大小,不符合顺序便交换顺序;
每一轮交换,便将最大(最小)的数“吐”出来了。。。
详细过程详解大家可以看一下这个链接,有案列分析:http://www.cnblogs.com/kkun/archive/2011/11/23/2260280.html
#include<stdio.h> int a[1005]; // 交换函数; void Swap(int &a,int &b) { int temp=a; a=b; b=temp; } int main() { int n,t; scanf("%d",&t); while(t--){ scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&a[i]); for(int i=0;i<n;i++){ // 冒泡排序; for(int j=0;j<n-i-1;j++){ if(a[j]>a[j+1]) Swap(a[j],a[j+1]); // 交换临近两个数的顺序; } } for(int i=0;i<n-1;i++) printf("%d ",a[i]); printf("%d\n",a[n-1]); } return 0; }