#include<iostream>
#include<vector>
#include<ctime>//需要用到随机数种子
#include<stdlib.h>//需要用到随机数
#include<random>//需要用到随机库里面的随机设备
using namespace std;
//函数声明
void print(vector<int>(&arr));
void popsort(vector<int>(&arr), int size);
bool search(vector<int>(&arr), int start, int end, int key);
void insertsort(vector<int>(&arr), int size);
void selectsort(vector<int>(&arr), int size);
int main()
{
vector<int> data;
random_device rd;
srand(rd());
for (int i = 0; i < 10; i++)
{
//随机产生1-100的十个整数
int temp = rand() % 100 + 1;
data.push_back(temp);
}
//打印随机生成的数组元素
print(data);
int size = data.size();
//使用冒泡排序 将数组中的元素从小到大排序
cout << endl;
cout << "冒泡排序结果"<<endl;
popsort(data, size);
print(data);
cout << endl;
cout << "直接插入排序结果" << endl;;
insertsort(data, size);
print(data);
cout << endl;
cout << "选择排序的结果" << endl;
selectsort(data, size);
print(data);
cout << endl;
//输入要查找的元素
int num;
cout << "请输入您想要查找的元素" << endl;
cin >> num;
if (search(data, 0, size - 1, num))
cout << num << "在容器data内" << endl;
else
cout<< num << "不在容器data内" << endl;
cin.get();
cin.get();
}
void print(vector<int>(&arr))
{
for (int num : arr)
cout << num << "\t";
}
//冒泡排序
void popsort(vector<int>(&arr),int size)
{
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size - i - 1; j++)
{
if (arr[j] > arr[j + 1])
{
//交换
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
//直接插入排序
void insertsort(vector<int>(&arr), int size)
{
int temp, i, j;
for (i = 1; i < size; i++)
{
temp = arr[i];
for (j = i - 1; i >= 0; j++)
{
if (temp < arr[j])
{
//如果待插入的数比已插入的遍历到的数小 则已插入的数后移
arr[j + 1] = arr[j];
}
else
break;
}
arr[j + 1] = temp;
}
}
//选择排序
void selectsort(vector<int>(&arr), int size)
{
for (int i = 0; i < size; i++)
{
//定义一个变量暂存排序队列中较小值的下标
int temp = i;
for (int j = i + 1; j < size; j++)
{
if (arr[temp] > arr[j])
{
temp = j;
}
}
arr[i] = arr[temp];
}
}
//二分查找
bool search(vector<int>(&arr), int start,int end,int key)
{
int mid = (start + end) / 2;
if (start > end)
return false;
if (arr[mid] == key)
return true;
else if (arr[mid] > key)
return search(arr, start, mid - 1, key);
else
return search(arr, mid + 1, end, key);
}
//运行结果