泡泡和选择排序c ++

时间:2013-12-01 18:42:16

标签: c++ arrays sorting

我几乎有这个代码工作唯一的问题是我的选择和气泡排序正在删除我的数组中的最后一个整数并将其替换为零或其打印零并且没有看到数组中的最后一个数字。无论如何都无法弄清楚如何解决问题。这是我的程序需要做的事情

  1. 通过创建一个介于1和49之间的6个值的随机数组来启动程序。确保使用time()函数和srand为rand()函数设定种子。使用将数组(及其大小)传递到的displaydata函数显示结果数据。

  2. 让用户确定是否希望使用冒泡排序对数组或选择排序进行排序。一旦用户做出决定,程序就会调用bubblesort或selectionsort函数(随机数组及其大小作为参数)对数组进行排序并调用displaydata函数(将排序数组作为参数)。

  3. [代码]

     #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;
    }
    

1 个答案:

答案 0 :(得分:0)

此循环

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

无效,因为您正在尝试访问不属于该数组的元素数组[6]。数组的有效索引范围是[0,SIZE -1],即[0,5]