2016-08-01 11 views
-1

Während ich ziemlich sicher bin, dass die Anzahl der Standortwechsel für alles andere korrekt ist, wird die für meine InsertionSort-Funktion als Null angezeigt.Warum wird die Anzahl der Standort-Swaps als Null angezeigt?

Ich bin mir nicht sicher warum.

Haben Sie Ideen, wie Sie diesen logischen Fehler beheben können?

#include <iostream> 

using namespace std; 

const int SIZE=20; 

void bubbleSort(int numbers[], int SIZE); 
void selectionSort(int numbers[], int SIZE); 
void insertionSort(int numbers[], int SIZE, int &a, int &b); 



int main() 
{ 
    int numbers[SIZE]= {26, 45, 56, 12, 78, 74, 39, 22, 5, 90, 87, 32, 28, 11, 93, 62, 79, 53, 22, 51}; 
    int value=0; 
    bool found; 
    int a; 
    int b; 

    cout << "Today we are going to be searching for values." << endl; 
    cout << "These are the values you have to choose from" << endl; 

    for (int i=0; i<SIZE; i++) 
     cout << numbers[i]<<"; "; 

    do 
    { 
     cout << "Make sure to enter a value that's in the list." << endl; 
     cin >> value; 
     found=false; 
     for (int i=0; i<SIZE; i++) 
     { 
      if (value==numbers[i]) 
      { 
       found=true; 
       break; 
      } 
     } 
     if (!found) 
      cout << "Enter a valid value !" << endl; 
    } 
    while (!found); 

    bubbleSort(numbers, SIZE); 
    selectionSort(numbers, SIZE); 
    insertionSort(numbers, SIZE, a, b); 





    return 0; 
} 

void bubbleSort (int numbers[], int SIZE) 
{ 
    cout<<"\nOriginal order: "; 
    for(int i=0;i<SIZE;i++) 
    cout<<numbers[i]<<' '; 
    int maxElement; 
    int index,counter=0; 

    for(maxElement=SIZE-1; maxElement>=0; maxElement--) 
    { 
     for(index=0;index<=maxElement-1;index++) 
     { 
      if(numbers[index]>numbers[index+1]) 
      { 
       swap(numbers[index], numbers[index+1]); 
       counter++;//increments counter everytime swap occurs 
      } 
     } 
    } 
cout<<"\nBubble Sorted: "; 
    for(int i=0;i<SIZE;i++) 
    cout<<numbers[i]<<' '; 
    cout<<"\nNumbers of location swap: "<<counter<<endl; 
} 

void swap(int &a, int &b) 
{ 
    int temp; 
    temp=a; 
    a=b; 
    b=temp; 
} 

void selectionSort(int numbers[], int SIZE) 
{ cout<<"\nOriginal order: "; 
    for(int i=0;i<SIZE;i++) 
    cout<<numbers[i]<<' '; 
    int startScan; 
    int index; 
    int miniIndex; 
    int miniValue; 
    int counter=0; 

    for(startScan=0;startScan<(SIZE-1);startScan++) 
    { 
     miniIndex=startScan; 
     miniValue=numbers[startScan]; 

     for(index=startScan+1;index<SIZE;index++) 
     { 
      if(numbers[index]<miniValue) 
      { 
       miniValue=numbers[index]; 
       miniIndex=index; 
      } 

     } 
     swap(numbers[miniIndex], numbers[startScan]); 
     counter++; 
    } 
cout<<"\nSelection Sorted: "; 
    for(int i=0;i<SIZE;i++) 
    cout<<numbers[i]<<' '; 
    cout<<"\nNumbers of location swap: "<<counter<<endl; 
    cout << endl; 
} 

void insertionSort(int numbers[], int SIZE, int &a, int &b) 
    { 
    int temp = a; a = b; b = temp; 
    int j, swap = 0; 
    cout<<"Original order: "; 
    for(int i = 0; i < SIZE; i++) 
    cout<< numbers[i] << ' '; 
    for (int i = 0; i < SIZE; i++){ 
     j = i; 

     while (j > 0 && numbers[j] < numbers[j-1]) 
      { 
       temp = numbers[j]; 
       numbers[j] = numbers[j-1]; 
       numbers[j-1] = temp; 
       j--; swap++; 
       } 
     } 
     cout <<"\nThe number of location swaps is: "<< swap << endl; 
     return; 
} 
+1

Vielleicht, weil das Array bereits sortiert ist, weil Sie es einfach zweimal sortiert haben. – immibis

+0

Ich bin mir nicht sicher, was du sagst. @immibis –

+2

Insertion-sort führt nur einen Swap aus, wenn das Array nicht bereits sortiert ist. Da das Array bereits sortiert ist, tauscht es 0 aus. – immibis

Antwort

2

Sie erhalten 0-Swaps für Insertionsort da Insertionsort 0 Swaps durchgeführt, da das Array bereits sortiert wurde, weil Sie Blase lief es irgendwie auf früher.

Sie erhalten keine 0 Swaps zur Auswahl, da Ihre Sortierfunktion immer N-1 Swaps ausführt, wenn N die Größe des Arrays ist, auch wenn das Array bereits sortiert ist.

Sie erhalten keine 0 Swaps für Blasensortierung, da das Array an diesem Punkt noch nicht sortiert ist.

Verwandte Themen