C++排序方法补充

---恢复内容开始---

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]--;
         }
     }
}

 

posted @ 2018-09-17 20:50  FXY_ssf  阅读(217)  评论(0编辑  收藏  举报