2016-04-30 80 views
0

我對編碼還不熟悉,我一直試圖用各種書籍教自己。 其中一個練習要求我檢查一個隨機數組[10]是否被排序。如果沒有排序,我必須使用插入排序對數組進行排序。我的排序功能[數組]有什麼問題?

#include <iostream> 
#include <cstdlib> 
#include <ctime> 

using namespace std; 

int findSmallestNumber (int values[], int index); 
void swap (int values[], int firstIndex, int secondIndex); 
void sort(int values[]); 

void sort(int values[]) 
{ 
    for (int i =0; i<10; i++) 
    { 
     int index = findSmallestNumber (values, i); 
     swap(values, i, index); 
    } 
} 

int findSmallestNumber (int values[], int index) 
{ 
    int index_of_smallest_number = index; 
    for (int i=index+1 ; i<10; i++) 
    { 
     if (values[i] < values[index_of_smallest_number]) 
     { 
     index_of_smallest_number = i; 
     } 
    } 
    return index_of_smallest_number; 
} 

void swap (int values[], int firstIndex, int secondIndex) 
{ 
    int temp = values[firstIndex]; 
    values[firstIndex] = values[secondIndex]; 
    temp = values[secondIndex]; 
} 

int main() 
{ 
    int array[10]; 
    srand(time(NULL)); 

    for (int i=0; i<10; i++) 
    { 
     array[i] = rand() % 100; //create an array with random numbers 
    } 

    sort(array); 
} 

該代碼在沒有任何編譯器錯誤的情況下運行,但是它沒有正確排列該數組。 這裏是results when I run the full program

謝謝你的時間。

+2

您的交換不換,你換左,最後一行的右側。 – MikeMB

+1

您是否一步步調試代碼以查看邏輯的運行方式? –

+0

@MikeMB O gosh,我不敢相信我犯了這樣一個粗心的錯誤。謝謝你指出。 – PixelProgrammer

回答

0

你的問題是在你的swap()功能,你是不是爲您指定的temp「回」到其假定的位置保存的值:

void swap(int values[], int firstIndex, int secondIndex) 
{ 
    int temp = values[firstIndex]; 
    values[firstIndex] = values[secondIndex]; 
    values[secondIndex] = temp ; // this is the fix 
}