2016-04-30 130 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 
}