参加了一家发展不错的私企软开笔试,现场试卷答题,其中有一道题让我眼前一亮。
题目:冒泡排序一次上浮一个数字,或者下沉一个数字,现在让设计一个交替上浮下沉的冒泡。
分析:这个确实从没有遇到过,感觉很新颖。仔细想想其实也不过如此,只要确定每次的操作、子数组上下边界就可以了,可以封装成函数方便理解和实现。
代码:
#include <iostream>
using namespace std;
void Up(int *nums, int low, int high)
{
if (low < high)
{
for (int i = low; i < high; ++i)
{
if (nums[i] > nums[i + 1])
{
int temp = nums[i];
nums[i] = nums[i + 1];
nums[i + 1] = temp;
}
}
}
}
void Down(int *nums, int low, int high)
{
if (low < high)
{
for (int i = high; i > low; --i)
{
if (nums[i] < nums[i - 1])
{
int temp = nums[i];
nums[i] = nums[i - 1]