-3

これが問題です。

少なくとも 20 の整数の 2 つの同一の配列を使用するプログラムを作成します。バブル ソート アルゴリズムを使用して配列の 1 つを昇順に並べ替える関数を呼び出す必要があります。この関数は、行った交換の回数を記録する必要があります。次に、プログラムは、選択並べ替えアルゴリズムを使用して他の配列を並べ替える関数を呼び出す必要があります。また、行った交換の回数も記録する必要があります。これらの値を画面に表示します。ここに私の問題があります。入力した 20 個の乱数をvoidbubbleSortおよび voidして並べ替えることができますが、各並べ替え方法で交換回数のカウンターを追加する方法を理解するのに苦労しています。selectionSort

また、指示には と を使用するように書かれていint bubbleSort(long [], int);ますint selectionSort(long [], int);。void の代わりに int を使用する理由がわかりません。おそらく私は両方を使用していますか?

とにかく、どんな助けでも大歓迎です。ありがとうございました。

編集:これが私がこれまでに持っているものです。

//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");
         }

これにより、100 万のエラーが発生します。最大のエラーは int main にあり、「int」の前に期待される一次式と期待される「;」と書かれています。「int」の前。私がチェックしたところ、すべての ; が属する場所にあると感じました。

4

3 に答える 3

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 に答える
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

私が書いた 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 に答える