排序算法:

     基本:冒泡,快速,选择,堆,插入,shell
     多路并归:

1.冒泡排序:

     思想:交换排序,通过相邻的交换来达到排序的目的。
     流程:
          1.对数组中的各数据,依次比较相邻两个元素的大小。
          2.如果前面的大,交换。经过一轮,可把最小的排好。
          3.然后用同样的方法,把剩下的数据排好。最后从小到大排好相应的数据。
#include <iostream>
#include <time.h>
#define SIZE 10
using namespace std;
void BubbleSort(int *a,int len)
{
     int temp;
     for(int i=0;i<len-1;i++)
     {
          for(int j=len-1;j>i;j--)
          {
               if(a[j-1]>a[j])
               {
                    temp=a[j];
                    a[j]=a[j-1];
                    a[j-1]=temp;    
               }         
          }
          cout<<i<<":";
          for(int k=0;k<len;k++)
          {
               cout<<a[k]<<" ";
          }
          cout<<endl;    
     }
}
int main()
{
     int shuzu[SIZE];
     srand(time(NULL));//随机种子
     for(int i=0;i<SIZE;i++)
     {
          shuzu[i]=rand()/1000+100;    
     }
     cout<<"old:";
     for(int i=0;i<SIZE;i++)
     {
          cout<<shuzu[i]<<"  ";
     }
     cout<<endl;
     BubbleSort(shuzu,SIZE);
     cout<<"now:";
     for(int i=0;i<SIZE;i++)
     {
          cout<<shuzu[i]<<"  ";
     }
     cout<<endl;
    
}
 
选择排序:
     
     思路:在每一步选取最小的来重新排列。
     流程:
          1.首先从原始数据中选中最小的一个,和位于第一个位置的数据交换、
          2.接着从剩下的n-1数据中选择次小的,与第二个位子交换。
          3.这样重复,数组从小到大排列。
#include <iostream>
#include <time.h>
using namespace std;
#define SIZE 10
void SelectionSort(int *a,int len)
{
     int temp,k;
     for(int i=0;i<len-1;i++)
     {
          k=i;
          for(int j=i+1;j<len-1;j++)
          {
               if(a[j]<a[k])
                    k=j;
          }
          if(k!=i)//交换
          {
               temp=a[k];
               a[k]=a[i];
               a[i]=temp;
          }    
     }    
}
int main()
{
      int shuzu[SIZE];
      srand(time(NULL));
      for(int i=0;i<SIZE;i++)
      {
           shuzu[i]=rand()/1000+100;
      }
      cout<<"old:";
       for(int i=0;i<SIZE;i++)
      {
               cout<<shuzu[i]<<" ";
      }
      cout<<endl;
      SelectionSort(shuzu,SIZE);
      cout<<"now:";
      for(int i=0;i<SIZE;i++)
      {
           cout<<shuzu[i]<<" ";
      }
      cout<<endl;
}
 
插入排序:
     思路:通过未排序的数据逐个插入合适的位置来完成工作。
     流程:
          1.首先对数组的前两个数据进行从小到大排序
          2.接着第3个数据插入合适的位子
          3.第4个
          4.重复
 
#include <iostream>
#include <time.h>
#define SIZE 10
using namespace std;
void InsertionSort(int *a,int len)
{
     int temp,j,i,k;
     for(i=1;i<len;i++)
     {
          //temp=a[i],a[j+1]=a[j];a[j+1]=temp;就是个交换。 判断 j-- 为逻辑
          temp=a[i],
          j=i-1;
          while(j>=0 && temp<a[j])
          {
               a[j+1]=a[j];
               j--;
          }
          a[j+1]=temp;
     }
}
int main()
{
       int arr[SIZE];
        srand(time(NULL));
        for(int i=0;i<SIZE;i++)
        {
             arr[i]=rand()/1000+100;
          }
          cout<<"old:";
          for(int j=0;j<SIZE;j++)
        {
             cout<<arr[j]<<"  ";
          }
          cout<<endl;
          InsertionSort(arr,SIZE);
          cout<<"now:";
          for(int k=0;k<SIZE;k++)
        {
             cout<<arr[k]<<"  ";
          }
          cout<<endl;
}
 
    Shell排序:(希尔排序,缩小增量排序)
     流程
          1.将有n个元素的数组,分成n/2个数字序列。第一个数据和第n/2+1成一对、。。。
          2.一次循环是每个序列对排好顺序
          3。然后,在变为n/4
          4.不断重复。
#include <iostream>
#include <time.h>
using namespace std;
#define SIZE 10

void ShellSrot(int *a,int len)
{
     int i,j;
     int r,temp;
     for(r=len/2;r>=1;r/=2)
     {
          for(i=r;i<len;i++)
          {
               temp=a[i];
               j=i-r;
               while(j>=0&&temp<a[j])
               {
                    a[j+r]=a[j];
                    j-=r;
               }
               a[j+r]=temp;    
          }    
     }
}
int main()
{
        int arr[SIZE];
        srand(time(NULL));
        for(int i=0;i<SIZE;i++)
        {
             arr[i]=rand()/1000+100;
          }
          cout<<"old:";
          for(int j=0;j<SIZE;j++)
        {
             cout<<arr[j]<<"  ";
          }
          cout<<endl;
          ShellSrot(arr,SIZE);
          cout<<"now:";
          for(int k=0;k<SIZE;k++)
        {
             cout<<arr[k]<<"  ";
          }
          cout<<endl;
}

ACM学习<3>的更多相关文章

  1. ACM学习-POJ-1143-Number Game

    菜鸟学习ACM,纪录自己成长过程中的点滴. 学习的路上,与君共勉. ACM学习-POJ-1143-Number Game Number Game Time Limit: 1000MS   Memory ...

  2. ACM学习-POJ-1125-Stockbroker Grapevine

    菜鸟学习ACM,纪录自己成长过程中的点滴. 学习的路上,与君共勉. ACM学习-POJ-1125-Stockbroker Grapevine Stockbroker Grapevine Time Li ...

  3. ACM学习-POJ-1003-Hangover

    菜鸟学习ACM,纪录自己成长过程中的点滴. 学习的路上,与君共勉. ACM学习-POJ-1003-Hangover Hangover Time Limit: 1000MS   Memory Limit ...

  4. ACM学习-POJ-1004-Financial Management

    菜鸟学习ACM,纪录自己成长过程中的点滴. 学习的路上,与君共勉. ACM学习-POJ-1003-Financial Management Financial Management Time Limi ...

  5. acm学习指引

    acm学习心得及书籍推荐   一般要做到50行以内的程序不用调试.100行以内的二分钟内调试成功.acm主要是考算法的,主要时间是花在思考算法上,不是花在写程序与debug上. 下面给个计划练练: 第 ...

  6. ACM学习

    转:ACM大量习题题库   ACM大量习题题库 现在网上有许多题库,大多是可以在线评测,所以叫做Online Judge.除了USACO是为IOI准备外,其余几乎全部是大学的ACM竞赛题库.   US ...

  7. 完成了C++作业,本博客现在开始全面记录acm学习历程,真正的acm之路,现在开始

    以下以目前遇到题目开始记录,按发布时间排序 ACM之递推递归 ACM之数学题 拓扑排序 ACM之最短路径做题笔记与记录 STL学习笔记不(定期更新) 八皇后问题解题报告

  8. ACM学习历程—HDU 5512 Pagodas(数学)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5512 学习菊苣的博客,只粘链接,不粘题目描述了. 题目大意就是给了初始的集合{a, b},然后取集合里 ...

  9. ACM学习历程—HDU5521 Meeting(图论)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5521 学习菊苣的博客,只粘链接,不粘题目描述了. 题目大意就是一个人从1开始走,一个人从n开始走.让最 ...

  10. ACM学习网站、

    转载:http://www.cnblogs.com/zhourongqing/archive/2012/05/24/2516180.html http://61.187.179.132/JudgeOn ...

随机推荐

  1. Pay attention to "Changing"

    data l_ct_imseg type vsep_t_imseg. refresh l_ct_imseg. append lines of ct_imseg to l_ct_imseg. call ...

  2. Django-ConttentType

    一 content-type 在django中,有一个记录了项目中所有model元数据的表,就是ContentType,表中一条记录对应着一个存在的model,所以可以通过一个ContentType表 ...

  3. cookie和session 以及Django中应用

    cookie和session 以及Django中应用   cookie和session机制 cookie和session机制 cookie机制采用的是在客户端保持状态的方案.作用就是为了解决HTTP协 ...

  4. Python之ftp服务器

    今天把做的ftp服务器过程总结一下,先看看要求 一.需求 1. 用户加密认证 2. 允许同时多用户登录 3. 每个用户有自己的家目录 ,且只能访问自己的家目录 4. 对用户进行磁盘配额,每个用户的可用 ...

  5. cpp 区块链模拟示例(六) 交易

    交易(transaction)是比特币的核心所在,而区块链的唯一目的,也正是为了能够安全可靠地存储交易.在区块链中,交易一旦被创建,就没有任何人能够再去修改或是删除它.在今天的文章中,我们会实现交易的 ...

  6. C++静态库与动态库(比较透彻)

    这次分享的宗旨是——让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择.这里不深入介绍静态库.动态库的底层格式,内存布局等,有兴趣的同学,推荐一本书<程序员的自 ...

  7. Mac could not read from remote repository

    IDE clone数据的时候要使用SSH,不使用HTTPS,就解决了问题

  8. app已损坏,打不开。你应该将它移到废纸篓

    首先声明: 有可能并非你安装的软件已损坏,而是Mac系统的安全设置问题,因为这些应用都是破解或者汉化的,那么解决方法就是临时改变Mac系统安全设置. 出现这个问题的解决方法: 修改系统配置:系统偏好设 ...

  9. PHP查看内存使用

    第一想法:memory_get_usage() 用microtime函数就可以分析程序执行时间memory_get_usage可以分析内存占用空间 SQL的效率可以使用打开慢查询查看日志分析SQL 找 ...

  10. utf-8转gb2312

    近日在对一个json串进行转码时,显示中文乱码,原因是json串编码方式为utf-8,而我程序在windows上采用的是多字节编码方式,即采用gb2312编码.这里就存在一个utf-8到gb2312的 ...