我不明白为什么我的冒泡排序代码不起作用

时间:2014-11-09 04:58:52

标签: c arrays pointers bubble-sort

for (int index = 0; index < size -1; index ++) {
    for (int index2 = 0; index2 < size - index; index2 ++) {
        if (index2 != (size - index) && array[index2] > array[index2 + 1] ) {
           store = array[index2 + 1];
          array[index2 + 1] = array[index2];
          array[index2] = store;
          printf ("%d",array[index2]);
          swap ++;
          comparison ++;
        }
    }
}

所以这是使用冒泡排序算法交换和比较数组元素的代码。它适用于所有情况,但除了带有两个元素的数组。 我用C来做这个程序。我使用指针来声明数组。

例如:

input: [2,0],
output: [0,1]

intput: [3.8],
output: [3,1]

4 个答案:

答案 0 :(得分:1)

它因一个错误而关闭。根据您的代码,第二个循环应该是

for (int index2 = 0; index2 < size - index -1; index2 ++){ ...

答案 1 :(得分:0)

for(i=1;i<n;++i)
for(j=0;j<(n-i);++j)
if(a[j]>a[j+1])
{
 temp=a[j];
 a[j]=a[j+1];
 a[j+1]=temp;
}

其中n =&#34;数组的大小&#34;       a [] = array

答案 2 :(得分:0)

输入到输出的第一个示例将0移动到第一个位置,因为if语句是true array [index2]&gt;数组[index2 + 1]。下一个示例剂量不传递参数的这一部分,使得if参数返回一个false语句(因此它永远不会将8移动到3点。接下来,我看到的问题是循环运行并要求一个不是一部分的值示例数组[2] = 3,4;所以当count = 2时,如果你有数组[count + 1],你就会抓住填充变量所需的下一组位数。这是你为什么要得到垃圾输出。希望这会有所帮助。我建议在它获得一个不存在的值之前停止循环。

 #include "stdlib.h"   // includes _countof() returns the number of elements in the array
 Array[2] = 1,2;
 for(element = 0; _countof(array) != element && ...; element++) 
 {
 } 

_countof(array)返回2 这部分将取代第二个for循环的第一部分。它会在循环超过数组限制之前停止循环,无论它的大小是多少。 添加其他部分到这个论点,祝你好运,希望这会有所帮助。

答案 3 :(得分:0)

以下是冒泡排序算法的示例

#include <stdio.h>

int bubbleSort( int *array )
{


    for (int c = 0 ; c < ( n - 1 ); c++)
    {
        for (int d = 0 ; d < n - c - 1; d++)
        {
            if (array[d] > array[d+1]) /* For decreasing order use < */
            {
                int swap       = array[d];
                array[d]   = array[d+1];
                array[d+1] = swap;
            }
       }
   }

   return 0;
}

但是,如果我要实现它,我将使用三个异或语句来实现交换,因为那时不需要交换变量。它会快很多