---恢复内容开始---
1.插入排序:
思想:当读入一个元素的时候,在已经排序好的序列中,搜索它的正确位置,再放入读入的元素。
但是,有一个不可以忽略的问题是:在插入元素之前,应当先将它后面的语速后移一位,以保证插入位置的原有元素不被覆盖。
例子:
有8个数。
36 25 48 12 65 43 20 58
排序方案;
第0步:[36] 25 48 12 65 43 20 58
第一步:[25 36] 48 12 65 43 20 58
第二步:[25 36 48] 12 65 43 20 58
第三步:[12 25 36 48] 65 43 20 58
第四步:[12 25 36 48 65] 43 20 58
第五步:[12 25 36 43 48 65] 20 58
第六步:[12 20 25 36 43 48 65] 58
第七步:[12 20 25 36 43 48 58 65]
程序:
#include<bits/stdc++.h> using namespace std; int main() { int n,i,j,t,a[1000000]; cin>>n; for(int i=0;i<n;i++) { cin>>a[i]; } for(int i=0;i<=n;i++) { for(int j=i-1;j>=0;j--) { if(a[j]<a[i])break; } if(j!=i-1) { t=a[i]; for(int k=i-1;k>j;k--) { a[k+1]=a[k]; a[k+1]=t; } } } for(int i=0;i<n;i++) { cout<<a[i]<<" "; } }
2.桶排序:
细想:若待排序的值在一个明显有限范围内时,可设计有限个有序桶,待排序的值装入对应的桶(值可以为多个),桶号就是待排序的值,顺序输出各桶的值,将得到有序的数列。
例子:
输入n个0到100以内的整数,由小到大排序输出。
输入示例;
10
2 3 1 2 4 55 3 55 3 2
输出示例:
1 2 2 2 3 3 3 4 55 55
程序;
#include<iostream> #include<cstdio> using namespace std; int main() { int b[10000]={0},n,k; //memset(b,0,sizeof(b));//将数组全部变为零 cin>>n; for(int i=1;i<=n;i++) { cin>>k;b[k]++; } for(int i=0;i<=100;i++) { while(b[i]>0) { cout<<i<<" "; b[i]--; } } }