我遇到问题,此代码中的最后一个数字未被排序.
// This is the more advanced optimzed version of bubble sort int modifiedBubbleSortArray(int array[]) { int swapped = 0; do { swapped = false; // We specify a loop here for the sorting for(int i=0;i<NUM_ARRAYS;i++) { // We specify aother loop here for the sorting for(int j=0;j< i - 1 /* <<< here we make less comparisns on each pass each time */ ;j++) { // If the array i is better than j we enter this swap if (array[j]<array[j+1]) { // We swap here for the functions swap(array[j],array[j+1]); // We measure the amount of times we swap amountOfSwaps += 1; // If we swapped we break out of the loop swapped = true; } } } } while (swapped); printArray(array); return amountOfSwaps; } // Here we swap values to sort them void swap(int & value1,int & value2) { // We specify a temp and use it to swap int temp=value1; value1=value2; value2=temp; }
解决方法
内循环应该是:
if (array[j]>array[j+1]) { // We swap here for the functions swap(array[j],array[j+1]); // We measure the amount of times we swap amountOfSwaps += 1; }
给出一个镜头,看看你的泡泡排序是否正确排序.
要按降序排序,只需更改if条件:
if (array[j]<array[j+1])
另一个bug是内部for循环.改为:
for(int j=0;j<=i-1;++j)
更新(基于添加了交换测试的上次更改):
bool swapped = false; // We specify a loop here for the sorting for(int i=0;i<NUM_ARRAYS;i++) { // We specify aother loop here for the sorting for(int j=0;j<=i-1;++j) { // If the array i is better than j we enter this swap if (array[j]<array[j+1]) { // We swap here for the functions swap(array[j],array[j+1]); // We measure the amount of times we swap amountOfSwaps += 1; // If we swapped we break out of the loop swapped = true; } } // If no swaps this iteration,break out if (!swapped) break; }
如果你真的想要一个好的排序,请查看introspection sort – 快速排序的变体.该算法更复杂,但排序也更有效,是O(N log N)而不是O(N ^ 2),这是冒泡排序的复杂性.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。