排序与查找
1、利用前面学习的随机数函数,自动生成10个1~100之间不重复的正整数,并存入一个数组中。
2、写一个插入排序函数,对上述存入数组的数排序,并输出排序结果。
3、写一个折半查找(二分查找)函数,在排完序后的数组上进行数据查找,并显示查找结果。
C++——排序与查找C++程序
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用 2
悬赏问题
- ¥100 求数学坐标画圆以及直线的算法
- ¥100 c语言,请帮蒟蒻写一个题的范例作参考
- ¥15 名为“Product”的列已属于此 DataTable
- ¥15 安卓adb backup备份应用数据失败
- ¥15 eclipse运行项目时遇到的问题
- ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
- ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
- ¥15 自己瞎改改,结果现在又运行不了了
- ¥15 链式存储应该如何解决
- ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站