2013-12-01 3 views
0

У меня почти этот код работает только проблема, мой выбор и сортировки пузырей бросают последнее целое число в моем массиве и заменяют его нулем или его печать нулем и не видя последнюю цифру в массиве , В любом случае не могу понять, как решить проблему. Это то, что моя программа должна сделатьBubble and Selection sort C++

  1. Начните программу, создав массив случайных 6 значений от 1 до 49. Убедитесь, что вы используете функцию времени() и srand семян ранд функция() , Отобразите полученные данные с помощью функции displaydata, через которую вы передаете массив (и его размер).

  2. Определите, хотите ли они использовать сортировку пузырьков для сортировки массива или сортировки. После того, как пользователь принял решение, программа вызовет функцию bubblesort или selectionsort (со случайным массивом и ее размер как аргументы), который сортирует массив и вызывает функцию displaydata (с отсортированным массивом в качестве аргумента).

[код]

#include <iostream> 
#include<time.h> 
using namespace std; 

const int SIZE = 6; 


void displaydata (int[], int); 
void bubblesort (int[], int); 
void selectionsort (int[], int); 

int main() 
{ 
    char choice; 

    int array [ SIZE ] = {0,0,0,0,0,0}; 

    srand ((int) time (0)); 

    for (int i = 0; i < SIZE; i++) 
    { 
     array [ i ] = 1 + (rand() % 49); 
    } 

    cout << "Do you wish to use Bubble Sort (Enter 'B') or Selection Sort (Enter 'S'): "; 

    cin >> choice; 
    cout << endl; 

    displaydata (array, SIZE); 

    if (choice == 'b' || choice == 'B') 
    { 
     bubblesort (array, SIZE); 
    } 
    else if (choice == 's' || choice == 'S') 
    { 
     selectionsort (array, SIZE); 
    } 
    else 
    { 
     cout << " Invalid Entry "; 
    } 

    return 0; 
} 

void displaydata (int array[], int size) 
{ 
    cout<<"----------------\n"; 
    cout<<" Original Array \n"; 
    cout<<"----------------\n\n"; 

/* loop 5 times */ 
    for (int size = 1; size < 7; size++) 
    { 
    cout << array [ size ] << endl; 
    } 
} 

void bubblesort (int array[], int b) 
{ 
    for(int i=1; i<b ;i++) 
    { 
     for(int a=0; a<b-1; a++) 
     { 
      if(array[a] > array[a+1]) 
      { 
      int temp; 
      temp = array[a]; 
      array[a] = array[a+1]; 
      array[a+1] = temp; 
      } 
     } 
    } 

    cout<<endl; 
    cout<<"-------------------\n"; 
    cout<<" Bubble Sort Array \n"; 
    cout<<"-------------------\n\n"; 

    for(int a=0; a<b; a++) 
     cout<<array[a]<<endl; 
} 

void selectionsort (int array[], int s) 
{ 
    int pos_min,temp; 

    for (int i=0; i < s-1; i++) 
    { 
     pos_min = i; 

    for (int j=i+1; j < s; j++) 
    { 
      if (array[j] < array[pos_min]) 
       pos_min=j; 
     } 

     if (pos_min != i) 
     { 
      temp = array[i]; 
      array[i] = array[pos_min]; 
      array[pos_min] = temp; 
     } 
    } 

    cout<<endl; 
    cout<<"----------------------\n"; 
    cout<<" Selection Sort Array \n"; 
    cout<<"----------------------\n\n"; 

    for(int a=0; a<s; a++) 
     cout<<array[a]<<endl; 
} 

ответ

0

Этот цикл

for (int i = 1; i < 7; i++) 

является invald, потому что вы пытаетесь получить доступ к элементу массива [6], который не принадлежит к массиву. Допустимый диапазон индексов массива равен [0, SIZE -1], который равен [0, 5]

+0

Я немного смущен, как бы исправить эту причину, мне нужно, чтобы он произвольно генерировал 6 целых чисел, не включая 0 – NoobCoder85

+0

Вы определили константу SIZE, поэтому используйте ее вместо магических значений 7 или 6. Например, первый такой цикл в вашем коде может быть записан как для (int i = 0; i

+0

, поэтому я изменил первый цикл к int i = 0; i NoobCoder85