我发现自己遇到了一个面试问题,其目标是编写一个排序算法,对一系列未排序的int
值进行排序:
int[] unsortedArray = { 9, 6, 3, 1, 5, 8, 4, 2, 7, 0 };
现在我用Google搜索,发现那里有很多sorting algorithms! 最后,我可以激励自己深入研究Bubble Sort因为开始时看起来很简单。
我阅读了示例代码并找到了这样的解决方案:
static int[] BubbleSort(ref int[] array)
{
long lastItemLocation = array.Length - 1;
int temp;
bool swapped;
do
{
swapped = false;
for (int itemLocationCounter = 0; itemLocationCounter < lastItemLocation; itemLocationCounter++)
{
if (array[itemLocationCounter] > array[itemLocationCounter + 1])
{
temp = array[itemLocationCounter];
array[itemLocationCounter] = array[itemLocationCounter + 1];
array[itemLocationCounter + 1] = temp;
swapped = true;
}
}
} while (swapped);
return array;
}
我 明确地 看到这种情况下do { //work } while(cond)
语句是一个很好的帮助,并阻止使用另一个辅助变量。
但这是唯一一个更有用的案例,还是您知道使用此条件的任何其他应用程序?
答案 0 :(得分:11)
一般来说:
do...while
。 while...
。编辑:我会说第一个选项大约有10%的时间出现,第二个选项大约有90%。在任何一种情况下,您都可以随时重新考虑使用它们。使用最接近你想说的那个。
答案 1 :(得分:5)
do
... while
保证循环内的代码体至少执行一次。这在某些条件下可以很方便;例如,在编写REPL循环时。
答案 2 :(得分:1)
任何时候你需要循环一些代码直到满足条件是一个很好的例子,说明何时使用do ... while或while ...
何时使用do ... while或while ...的一个很好的例子是,如果你有一个游戏或模拟游戏引擎持续运行各种组件,直到某些条件出现,就像你赢或输。
当然这只是一个例子。
答案 3 :(得分:0)
以上帖子对于两个条件循环形式是正确的。有些语言有重复,直到形式而不是while。还有一个极简主义的观点,其中只有必要的控制结构应该存在于一种语言中。虽然这样做是必要的,但事实并非如此。对于冒泡排序,你要避免去那里,因为它是常见的排序算法中最慢的。请查看选择排序或插入排序。 Quicksort和merge排序速度很快,但如果你碰巧选择了一个不好的数据透视值,就很难在不使用递归的情况下编写并且表现不佳。