湖南某高校一根小稻草 2019-05-30 10:53 采纳率: 100%
浏览 753
已采纳

C++——排序与查找C++程序

排序与查找
1、利用前面学习的随机数函数,自动生成10个1~100之间不重复的正整数,并存入一个数组中。
2、写一个插入排序函数,对上述存入数组的数排序,并输出排序结果。
3、写一个折半查找(二分查找)函数,在排完序后的数组上进行数据查找,并显示查找结果。

  • 写回答

3条回答

  • qtchen_1988 2019-05-31 12:18
    关注
    #include <iostream>
    #include <vector>
    #include <stdlib.h>
    #include <time.h>
    #include <algorithm>
    
    using namespace std;
    
    typedef unsigned int UINT;
    
    void printfVer(vector<UINT> ver)
    {
        std::cout << "********* printf start **********" << endl;
        for(size_t i=0;i < ver.size();i++)
        {
            std::cout << ver[i] << endl;
        }
        std::cout << "********** printf end ***********" << endl;
    
    }
    
    void insertsort(vector<UINT> &ver)
    {
          for (size_t i=1;i < ver.size();i++)
          {
             UINT key = ver[i];
             int j = i-1;
             while (j >= 0 && ver[j] > key) //与一个的进行比较,小的话就交换
             {
                  ver[j+1] = ver[j];//交换
                  j--;//下标往前移动
              }
              ver[j+1] = key;//不比前一个小,就不进行交换
          }
    }
    
    int search(const vector<UINT> &ver,int i,int j,UINT x){
        int mid;
        mid = (i+j)/2;
        if(i > j) return -1;
        if(ver[mid] == x) return mid;
        if(ver[mid] > x) return search(ver,i,mid-1,x);
        else return search(ver,mid+1,j,x);
    }
    
    int main()
    {
        vector<UINT> ver;
        ver.clear();
    
        srand((UINT)time(NULL));
        while (1) {
            UINT temp = rand()%100+1;
            vector<UINT>::iterator iter;
            iter = std::find(ver.begin(), ver.end(), temp);
            if(iter == ver.end())
            {
                //std::cout << "not found and push_back it: " << temp << endl;
                ver.push_back(temp);
            }
            else
            {
              //  std::cout << "found and neglect it: " << temp <<  endl;
            }
    
            if(ver.size() == 10)
                break;
        }
    
        printfVer(ver);
        insertsort(ver);
        printfVer(ver);
    
        int findIdx = search(ver,0,ver.size()-1, 80);
        std::cout << findIdx << endl;
        if(findIdx != -1)
        {
            std::cout << ver[findIdx] << endl;
        }
    
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥100 求数学坐标画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站