2013-07-04 110 views
2

這是一個程序,其中一組數字按升序排序,方法是找到數組左端點和末端之間的最大數字,然後將該元素移入正確的索引位置通過切換元素。我的問題是它不是按升序排列,因爲它們之間的數字沒有得到排序,我想知道如何在程序中使用它。 這是我的時刻代碼:選擇排序程序C

#include <stdio.h>         /* Library inclusions */ 
#include "genlib.h" 
#include "simpio.h" 
#define size 7          /* Constants */ 

void sortArray (int numbers[]);      /* prototypes */ 
int indexMax (int numbers[], int low, int high); 
void swap (int numbers[], int loc, int loc1); 
void getArray (int numbers[]); 
void displayArray (int numbers[]); 

main() 
{ 
     int numbers[size]; 
     getArray(numbers); 
     sortArray(numbers); 
     displayArray (numbers); 
     getchar(); 
} 

void getArray (int numbers[])       /*Function getArray*/ 
{ 
    int i; 

    for (i=0; i<size; i++) 
    { 
     printf ("Enter an integer? "); 
     numbers[i]=GetInteger(); 
    } 
} 

void displayArray (int numbers[])      /*Function displayArray*/ 
{ 
    int i; 

    printf ("\n The sorted list is: \n"); 
    for (i=0; i< size; i++) 
    { 
     printf ("%d\t", numbers[i]); 
    } 
} 

void sortArray (int numbers[])      /*Function sortArray*/ 
{ 
    int i , maxInd; 

    for (i=0; i<size;i++) 
    { 
     maxInd = indexMax (numbers, i, size-1); 
     swap (numbers, size-1, maxInd); 
    } 
} 

int indexMax (int numbers[], int low, int high)  /*Function indexMax*/ 
{ 
    int i, maxInd; 

    maxInd=high; 
    for (i=low;i<=high;i++) 
    { 
     if (numbers[i]>numbers[maxInd]) 
     { 
         maxInd =i; 
     } 
    } 
    return (maxInd); 
} 

void swap (int numbers[], int loc, int loc1)   /*Function swap*/ 
{ 
    int temp; 

    temp=numbers[loc]; 
    numbers[loc]=numbers[loc1]; 
    numbers[loc1]=temp; 
} 

非常感謝你。 :)

+3

今天作出承諾:一旦你不是初學者,你會改變你的顯示名稱。 – devnull

+2

您是否嘗試過逐行調試程序中的代碼,以幫助您查看可能出現的問題?做一個小陣列,這樣不會花費很長時間。 –

回答

1

您SortArray函數邏輯錯誤。您發現maxindexilast index並將其替換爲last index,然後增加i。在第一次迭代中,最大數量在隨後的迭代中達到結尾,last index僅被選爲maxindex,並且數組中沒有變化。

相反,您總是需要從第一個索引到小於先前最後一個索引的索引進行迭代。

void sortArray (int numbers[])      /*Function sortArray*/ 
{ 
    int i , maxInd; 

    for (i=size-1; i>=0;i--) 
    { 
     maxInd = indexMax (numbers, 0, i); 
     swap (numbers, i, maxInd); 
    } 
} 
+1

非常感謝你^^我現在完全明白了什麼是錯的 –

+0

如果它適合你,你可以接受答案。 –

0

可能有一些錯誤的功能sortArray()

void sortArray (int numbers[])   
{ 
    int i 

    int maxInd; 

    for (i=0; i<size;i++) 
    { 
     maxInd = indexMax (numbers, i, size-i-1); 
     swap (numbers, size-1-i, maxInd); 
    } 
} 

我做一個小的變化,和它的工作!

0

indexMax函數變化greater than (>)less than (>)

+2

非常感謝:)但它沒有工作:(但是,Shashwat Kumar已經解決了問題,所以沒關係。 –