排序算法:

     基本:冒泡,快速,选择,堆,插入,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. java_24 FileOutputStream类和FileInputStream类

    1.OutputStream 和InputStream 输入和输出:1.参照物都是java程序来惨遭 2.Input输入,持久化上的数据---->内存 3.Output输出,内存--->硬 ...

  2. spring整合kafka(配置文件方式 消费者)

    Kafka官方文档有   https://docs.spring.io/spring-kafka/reference/htmlsingle/ 这里是配置文件实现的方式 先引入依赖 <depend ...

  3. Linux驱动之异常处理体系结构简析

    异常的概念在单片机中也接触过,它的意思是让CPU可以暂停当前的事情,跳到异常处理程序去执行.以前写单片机裸机程序属于前后台程序,前台指的就是mian函数里的while(1)大循环,后台指的就是产生异常 ...

  4. sql中with as测试实例

    一.使用场景 1.多处使用才有必要2.一方面减少代码数量便于理解维护3.一方面跟代码一样一次计算到处用 二.实例(本处示例仅为测试,实际用join比较好) 1.不使用with as 2.使用with ...

  5. java读取jar包中的文件

    随手写了一个java小工具,maven打包成功后,发现工具总是读不到打在jar包中的文件信息,要读取的文件位于 /src/main/resources 目录下,打包成功后,文件就在jar包中根目录下, ...

  6. Mad Libs游戏1

    简单的输入输出 输入代码 name1=input('请输入姓名:') name2=input('请输入一个句子:') name3=input('请输入一个地点:') name4=input('请输入一 ...

  7. webserver

    1. 控制台,浏览器输入http://localhost:8080/ using System; using System.Collections; using System.IO; using Sy ...

  8. 第五次spring会议

    昨天所做之事: 昨天我对软件加上了换肤和透明度等功能. 今天所做之事: 我对软件加上了保密功能. private void 一键转密文ToolStripMenuItem_Click(object se ...

  9. 学习blinker

    from blinker import signal do_sth = signal('do_sth') #创建信号 def process(f, a, b, **kwargs): f(a, b, * ...

  10. 日期Data类,日历类Calendar

    用于得到当前时间,和设置日期类数据 public void testDate() { // 创建一个日期对象 Date date = new Date(); /** * 从1900年1月1日 00:0 ...