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