1.选择排序
(1) 基本思想:每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在待排序的数列的最前,直到全部待排序的数据元素排完。
(2)排序过程:
【示例】:
初始关键字 [49 38 65 97 76 13 27 49]
第一趟排序后 13[38 65 97 76 49 27 49 ]
第二趟排序后 13 27[65 97 76 49 38 49]
第三趟排序后 13 27 38 [97 76 49 65 49]
第四趟排序后 13 27 38 49 [76 97 65 49]
第五趟排序后 13 27 38 49 49 [97 65 76]
第六趟排序后 13 27 38 49 49 65 [97 76]
第七趟排序后 13 27 38 49 49 65 76 [97]
最后排序结果 13 27 38 49 49 65 76 97
代码如下:
#include<bits/stdc++.h>
using namespace std;
const int MAXN=10001;
int main()
{
int n,k,i,j;
float temp,a[MAXN];
cin>>n;
for(i=0;i<n;i++)
cin>>a[i]; //输入n个数
for(i=0;i<n;i++) //i控制当前序列中最小值存放的数据位置
{
k=i;
for(j=i+1;j<n;j++) //在当前无序区a[i..n]中选最小的元素a[k]
if(a[j]<a[k]) k=j;
if(k!=i) //交换a[i]和a[k],将当前最小值放到a[i]位置
{
temp=a[i];a[i]=a[k];a[k]=temp;
}
}
for(i=0;i<n;i++)
cout<<a[i]<<" ";
return 0;
}
2.冒泡排序
(1)基本的冒泡排序
①基本思想
依次比较相邻的两个数,把大的放前面,小的放后面。即首先比较第1个数和第2个数,大数放前,小数放后。然后比较第2个数和第3个数......直到比较最后两个数。第一趟结束,最小的一定沉到最后。重复上过程,仍从第1个数开始,到最后第2个数,然后......
由于在排序过程中总是大数往前,小数往后,相当气泡上升,所以叫冒泡排序。
代码如下:
for(int i=1;i<=n-1;++i)
for(int j=1;j<=n-i;++j)
if(a[j]>a[j+1])
swap(a[j],a[j+1]);
3.桶排序
桶排序的思想是若待排序的记录的关键字在一个明显有限范围内(整型)时,可设计有限个有序桶,每个桶装入一个值(当然也可以装入若干个值),顺序输出各桶的值,将得到有序的序列。
例:输入n个0到100之间的不相同整数,由小到大排序输出。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int b[101],k,i,n;
memset(b,0,sizeof(b)); //数组初始化
cin>>n;
for(i=1;i<=n;i++)
{
cin>>k;
b[k]++; //将关键字等于k的值全部装入第k桶
}
for(i=0;i<=100;i++)
while(b[i]>0)
{
cout<<i<<" ";
b[i]--; //输出排序结果
}
cout<<endl;
return 0;
}