冒泡使用函数在C ++(或C)中排序

问题描述 投票:-3回答:2

我一直在尝试使用C或C ++实现冒泡排序,具有以下功能。我已经创建了一个函数,它返回max的索引,然后我将它替换为每次迭代的最后一个元素,m。

我已经打印了几次输出并且它工作但是当我使用循环迭代整个数组时,存在一些错误,例如某些值的错误顺序。

here is a picture of input/output example

#include<iostream>
#include<stdio.h>
int find_max(int array[50], int len);
int main(int argc, char const *argv[]) {
    int n;
    std::cout << "enter number of values" << '\n';
    std::cin >> n;
    int array[n];
    for (int i=0;i<n;i++)
    {
        printf("Array[%i]= ",i );
        std::cin >>array[i];
        printf("\n" );
    }
    for (int i=0;i<n;i++)
    {
        int m=n-i-1;
        int index = find_max(array,m);
        int temp = array[index];
        array[index]=array[m];
        array[m]=temp;
        printf("%i\n",array[m]);
    }
}
int find_max(int array[50],int len)
{
    int index=0;
    int max = array[0];
    for (int i=0;i<len;i++)
    {
        if (array[i]>= max)
        {
            max = array[i];
            index = i;
        }
    }
    return index;
}
c++ c arrays sorting bubble-sort
2个回答
0
投票
array[index]=array[m];
array[m]=temp;
printf("%i\n",array[m]);

在所有这些行中它应该是m-1而不是m,因为m-1是数组或m元素中最后一个元素的索引。


0
投票

首先,您打印尚未初始化的数组中的第i个元素的值。因此,我建议你在main函数的第一个for循环中将printf函数与输入阅读器交换。

正如我在第二个for循环中看到的那样,排序发生的地方,你将数组中的最高值与数组中的最后一个元素交换。这应该导致最高值位于数组的开头。我建议使用以下实现:

void bubblesort(int array[LENGTH])
{
int i, j;

for (i = 1; i < LENGTH; i++)
{
    for (j = 1; j < LENGTH; j++)
    {
        if (array[j - 1] > array[j])
        {
            int exchange = array[j - 1];
            array[j - 1] = arra[j];
            array[j] = exchange;
        }
    }
}

在您的代码中,n是一个高于最高索引的值,因为最后一个索引是n-1。因此,索引i在开头是0,这意味着m的第一个值超出界限。因此,从m减去1。

© www.soinside.com 2019 - 2024. All rights reserved.