-3

这就是问题所在。

编写一个程序,它使用两个相同的至少 20 个整数的数组。它应该调用一个函数,该函数使用冒泡排序算法对其中一个数组进行升序排序。该函数应记录其进行的交换次数。然后程序应该调用一个函数,该函数使用选择排序算法对另一个数组进行排序。它还应该计算它进行的交换次数。在屏幕上显示这些值。这就是我的问题所在。我可以做 voidbubbleSort和 voidselectionSort并对我输入的 20 个随机数进行排序,但我很难弄清楚如何为每种排序方法中的交换次数添加一个计数器。

此外,该指令说使用int bubbleSort(long [], int);and int selectionSort(long [], int);。我很困惑为什么我会使用 int 而不是 void。也许我两个都用?

无论如何,非常感谢任何帮助。谢谢你。

编辑:这是我到目前为止所拥有的。

//Sorting Benchmarks
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;

// Function Prototypes
void sortArray (int [], int);
void showArray (const int [], int);
int bubbleSort(long [], int);
int selectionSort(long [], int);

int main()
{
    // Define an array with unsorted value
    const int SIZE = 20;
    int values[SIZE]{20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1);

    // Display the values
    cout << "The unsorted values are:\n";
    showArray(values, SIZE);

    //Sort the values. 
    sortArray(values, SIZE);

    //Display them again.
    cout << "The sorted values are:\n";
    showArray(values, SIZE);

    return 0;
}

void sortArray(int array[], int size)
{
     bool swap;
     int temp;

     do
     {
         swap = false;
         for (int count = 0; count < (size - 1); count++)
         {
             if (array[count] > array[count + 1])
             {
                              temp = array[count];
                              array[count] = array[count + 1];
                              array[count + 1] = temp;
                              swap = true;
                              count++
                              dispCount()
                              }
                              }
                              } while (swap);
                              }

void dispCount()
{
     cout << "The current number of exchanges are " << count << endl;
}

void showArray(const int array[], int size)
{
     for (int count = 0; count < size; count++)
         cout << array[count] << " ";
         cout << endl;

         system("PAUSE");
         }

有了这个,我得到了一百万个错误,最大的一个在 int main 中,它在“int”之前表示预期的主表达式和预期的';' 在“int”之前。我已经检查过了,我觉得所有的 ; 都是它们所属的地方。

4

3 回答 3

0

我为您编写的 C 代码返回此输出

您已提供此数据 1 2 3 4 5 9 8 7 6 11 12

Selection sort在这个阵列上进行了14次交换操作

Bubble sort在这个阵列上进行了48 次交换操作


您要求一个counter变量来保存冒泡排序和选择排序程序中交换操作的数量。

我已经C为您的两个问题编写了代码。

冒泡排序

#include<stdio.h>
#define size 20
int Arr[size],i,j,counter=0;    
void bubble();
int main()
{
    printf("Enter your elements now\n");
    for(i=0;i<size;i++)
    scanf("%d",&Arr[i]);
    printf("You have provided\n");
    for(i=0;i<size;i++)
    printf("\t%d",Arr[i]);
    printf("\nPress any key to perform Bubble sort\n");
    bubble();
    printf("Result after Bubble sort\n");
    for(i=0;i<size;i++)
    printf("\t%d",Arr[i]);
    printf("Bubble sort on this array took %d swap operation",counter);
    return 0;
}
void bubble()
{

    for(i=0;i<size;i++)
    {
        for(j=0;j<(size-1)-i;j++)
        {
            if(Arr[j]>Arr[j+1])
            {
                Arr[j] = Arr[j] + Arr[j+1];
                Arr[j+1] = Arr[j] - Arr[j+1];
                Arr[j] = Arr[j] - Arr[j+1];
                counter++;
            }
            printf("\r");
        }
    }
}

选择排序

#include<stdio.h>
#define size 20
void selection();
int findmin(int []);
int i,j,Arr[size],min,counter;
int main()
{
    printf(" Enter your elements now \n");
    for(i=0;i<size;i++)
        scanf("%d",&Arr[i]);
    printf("You have provided this data \n");
    for(i=0;i<size;i++)
        printf("\t%d",Arr[i]);
    printf("\nPress any key to perform selection sort\n");
    selection();
    printf("Result after selection sort\n");
    for(i=0;i<size;i++)
        printf("\t%d",Arr[i]);
    printf("Selection sort on this array took %d swap operation",counter);
}
void selection()
{
    for(i=0;i<(size-1);i++)
    {
        j = findmin(Arr);
        if(Arr[i]>Arr[j])
        {   
            Arr[i] = Arr[i] + Arr[j];
            Arr[j] = Arr[i] - Arr[j];
            Arr[i] = Arr[i] - Arr[j];
            counter++;
        }
    }
}
int findmin(int a[])
{
    min = i;
    for(j=i+1;j<size;j++)
    {   
        if(a[j]<a[min])
            min = j;
    }   
    return(min);
}
于 2013-09-04T04:20:44.283 回答
0
static int count = 0; in the head of function bubbleSort;

count++代码放在您切换 2 个数字的位置之后。

printf("%d", count); in the end.
于 2013-09-04T04:10:10.940 回答
0
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;

void sortArray (int [ ], int ) ;
void showArray (int [ ], int ) ;
int count = 0;

int main ()
{
const int SIZE = 6;
int values[SIZE] = {7, 2, 3, 8, 9, 1} ;

cout << "The unsorted values are: \n";
showArray (values, SIZE) ;

sortArray (values, SIZE) ;

cout<< "The sorted values are: \n" ;
showArray (values, SIZE) ;

return 0;
}

void sortArray (int array [ ], int SIZE)
{
int temp;
bool swap;

do
{ swap = false;
for (int count = 0 ; count < (size - 1 ) ; count ++)
{
if (array [count] > array [count + 1] )
{
temp = array [count] ;
array [count] = array [count + 1] ;
array [count + 1] = temp ;
swap = true ;
count++;
dispCount();
}
}
} while (swap) ;
}

void dispCount(){
cout << "The current amount of swaps is " << count << endl;
}

void showArray (int array [ ], int size)
{
for (int count = 0 ; count < size ; count ++)
cout << array [count] << " " ;
cout << endl ;
}

参考链接

链接 1

链接 2

链接 3

于 2013-09-04T04:08:19.753 回答