冒泡排序和选择排序不排序

时间:2014-03-13 08:20:50

标签: c++ sorting bubble-sort selection-sort

对于我的项目,我必须使用.cpp文件中的单独文件中的两个函数对数组进行排序,而不是.h文件。一个用于按降序排列冒泡,另一个用于按升序排序。当我编译我的代码时,无论是排序还是工作。有人可以帮我解决这个问题吗?

到目前为止,这是我的代码。

Driver.cpp

#include <iostream>
#include <stdlib.h>
#include "bubblesort.cpp"
#include "selectionsort.cpp"

const int ArraySize = 10;
const int Seed = 1;

int main(int argc, const char * argv[])
{
    int values[ArraySize];

    //seed random number generator
    srand(Seed);

    //fill array with random intergers
    for (int i = 0; i < ArraySize; i++)
        values[i] = rand();

    std::cout << "\n Elements in array." << std::endl;

    for (int i = 0; i < ArraySize; i++)
        std::cout << &values[i] << "\n";

    //function call for bubble sort in descending order.
    bubblesort(values, ArraySize);

    std::cout << "\n Array after bubble sort" << std::endl;

    for (int i = 0; i < ArraySize; i++)
        std::cout << &values[i] << "\n";

    //function call for selection sort in ascending order
    selectionsort(values, ArraySize);

    std::cout << "Array after selection sort." << std::endl;
    for (int i = 0; i < ArraySize; i++)
        std::cout << &values[i] << "\n";

    return 0;
}

bubblesort.cpp

inline void bubblesort(int values[], int size)
{
    for (int i = 0; i < size - 1; i++)
    {
        for (int j = 0; j < size - 1; j++)
        {
            if (values[j + 1] > values[j])
            {
                int temp = values[j];
                values[j] = values[j + 1];
                values[j + 1] = temp;

            }
        }
    }
}

selectionsort.cpp

inline void selectionsort(int values[], int size)
{
    for (int i = 0; i < size - 1; i++)
    {
        for (int j = 0; j < size; j++)
        {
            if (values[i] < values[j])
            {
                int temp = values[i];
                values[i] = values[j];
                values[j] = temp;
            }
        }
    }
}

修改

这给出了以下输出:

Elements in array.
0x7fff4f38f620
0x7fff4f38f624
0x7fff4f38f628
0x7fff4f38f62c
0x7fff4f38f630
0x7fff4f38f634
0x7fff4f38f638
0x7fff4f38f63c
0x7fff4f38f640
0x7fff4f38f644

 Array after bubble sort
0x7fff4f38f620
0x7fff4f38f624
0x7fff4f38f628
0x7fff4f38f62c
0x7fff4f38f630
0x7fff4f38f634
0x7fff4f38f638
0x7fff4f38f63c
0x7fff4f38f640
0x7fff4f38f644
Array after selection sort.
0x7fff4f38f620
0x7fff4f38f624
0x7fff4f38f628
0x7fff4f38f62c
0x7fff4f38f630
0x7fff4f38f634
0x7fff4f38f638
0x7fff4f38f63c
0x7fff4f38f640
0x7fff4f38f644

3 个答案:

答案 0 :(得分:1)

您可以在此处打印出数组元素的地址  std :: cout&lt;&lt; &amp; values [i]&lt;&lt; “\ n” 个; 你应该用  std :: cout&lt;&lt;值[i]&lt;&lt; “\ n” 个; 打印元素

您的排序功能也是错误的

inline void bubblesort(int * values, int size)
{
    for (int i = 0; i < size - 1; i++)
    {
        for (int j = i + 1; j < size ; j++)
        {
            if (values[i] < values[j])
            {
                int temp = values[j];
                values[j] = values[i];
                values[i] = temp;

            }
        }
 }

}

inline void selectionsort(int values [],int size)

{
    for (int i = 0; i < size - 1; i++)
    {
        int k = i;
        for (int j = i; j < size; j++)
        {
           if (values[k] > values[j])
           {
               k = j;
           }
         }

         if (k != i)
         {
             int temp = values[k];
             values[k] = values[i];
             values[i] = temp;        
         }
    }
}

答案 1 :(得分:0)

这里有几点需要纠正:

  1. 替换

    void bubblesort(int values[], int size);

    bubblesort(values, ArraySize);

  2. 您的输出例程实际上是返回地址而不是值,因为如果您编写&amp; values [i],则取消引用它两次: - values [i]已取消引用该值。

    std::cout << values[i] << "\n";

  3. 此外,您可能需要再次检查排序算法。 Bubblesort似乎按原样工作,但在选择排序方面仍然有些可疑。弗拉基米尔的回答将有所帮助。

    Reference for Bubblesort in C

答案 2 :(得分:0)

这里有很多事要做,让我们从你的输出开始:

std::cout << &values[i] << "\n";

会为您提供values[i]的地址。由于您永远不会更改地址,因此您只能获得相同输出的值。

然后让我们来看看你的选择排序:它不是一个真正的选择排序算法。我想你在这里混淆了bubblesort和部分选择排序。看一下selection sort from wikipedia,您会发现有一些部分缺失,如

  • 跟踪当前子数组的最小索引(必须选择排序!)
  • 错误的交换实现(应该依赖于最小索引)