1、给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。
#include <iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
int maximumGap(vector<int> &nums)
{
int i, j;
int len = nums.size();
if (len < 2)
return 0;
else
{
for (i = 1; i < len; i++) //冒泡排序
{
for (j = len - 2; j >= i; j--)
{
if (nums[j]>nums[j + 1])
{
swap(nums[j], nums[j + 1]); //采用C++内置函数交换两数位置
/*int temp;
temp = nums[j + 1];
nums[j + 1] = nums[j];
nums[j] = temp;*/
}
}
}
//sort(nums.begin(),nums.end()); //采用C++内置函数排序
int diff, max_diff = 0;
for (int i = 0; i < len - 1; i++)
{
diff = nums[i + 1] - nums[i];
if (diff>max_diff)
max_diff = diff;
}
return max_diff;
}
}
int main()
{
vector<int> nums = { 1, 11, 8, 100, 6, 3, 2, 35, 7 };
cout << maximumGap(nums) << endl;
return 0;
}
2、巧用C++当中的容器,迭代器以及自带函数
#include <iostream>
#include<vector>
#include<algorithm> //sort函数头文件
using namespace std;
int main()
{
vector<int> nums;
int n = 5;
while (n--)
{
int score;
cin >> score;
nums.push_back(score);
}
sort(nums.begin(), nums.end());
for (auto it = nums.begin(); it != nums.end(); ++it)
cout << *it << endl;
return 0;
}
3、洗牌算法
方法一:使用algorithm库函数中的random_shuffle()函数
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
#define CARDS_COUNT 54
int main()
{
vector<int> s_stl;
for (int i = 0; i < CARDS_COUNT; ++i)
s_stl.push_back(i);
random_shuffle(s_stl.begin(), s_stl.end());
cout << "使用C++算法库:" << endl;
//for (vector<int>::iterator it = s_stl.begin(); it != s_stl.end(); it++)
for (auto it = s_stl.begin(); it != s_stl.end(); it++)
cout << " " << *it;
return 0;
}
方法二:全局洗牌法
a)首先生成一个数组,大小为54,初始化为1~54
b)按照索引1到54,逐步对每一张索引牌进行洗牌,首先生成一个余数 value = rand %54,那么我们的索引牌就和这个余数牌进行交换处理
c)等多索引到54结束后,一副牌就洗好了
代码如下所示:
#include<iostream>
#include<vector>
#include<algorithm>
#include<time.h> //time函数头文件
#include<stdlib.h>//srand()函数头文件
using namespace std;
#define CARDS_COUNT 54
void get_rand_number(vector<int> &array, int length)
{
int index;
int value;
int median;
//if (NULL == array || 0 == length)
if (array.empty() || 0 == length)
return;
srand((int)time(0));//利用系统的时间作为生成随机数的种子
/* 每次发牌的时候任意分配待交换的数据 */
for (index = 0; index < length; index++)
{
value = rand() % length;
median = array[index];
array[index] = array[value];
array[value] = median;
}
}
int main()
{
vector<int> s_stl;
for (int i = 0; i < CARDS_COUNT; ++i)
s_stl.push_back(i);
get_rand_number(s_stl, CARDS_COUNT);
for (auto it = s_stl.begin(); it != s_stl.end(); it++)
cout << " " << *it;
return 0;
}
4、二分查找实现(递归和非递归两种方法)
#include<iostream>
using namespace std;
int BinarySearch(int *array, int aSize, int key)//非递归查找
{
if (array == NULL || aSize <= 0)
return -1;
int low, high, mid;
low = 0;
high = aSize-1;
while (low<=high)
{
mid = (low + high) / 2;
if (array[mid] == key)
return mid;
else if (array[mid] > key)
high = mid-1;
else
low = mid+1;
}
return -1;
}
int BinarySearchRecursive(int *array, int low, int high, int key)//递归
{
if (low > high)
return -1;
int mid = (low + high) / 2;
if (array[mid] == key)
return mid;
else if (array[mid] > key)
BinarySearchRecursive(array, low, mid - 1, key);
else
BinarySearchRecursive(array, mid + 1, high, key);
}
int main()
{
int array[10] = {0};
for (int i = 0; i < 10; i++)
array[i] = i;
//cout << "No recursive:" << endl;
//cout << "position:" << BinarySearch(array,10,11)<< endl;
cout << "Recursive:" << endl;
cout << "position:" << BinarySearchRecursive(array, 0, 9, 11) << endl;
return 0;
}