2013-10-26 79 views
-1

所有,插入排序錯誤C

我可能失去了一些東西簡單在這裏,但我一直在尋找了一些C簡單的算法,並沒有能夠得到在代碼中插入排序如下工作。泡泡似乎工作。

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 


void bubbleSort(char *pStringPointers[], int size); 
void insertionSort(char *pStringPointers[], int size); 
void ArrayTest(char string[][100],int size); 

void swap(char **pString1, char**pString2); 

int main (int argc, const char *args[]){ 
    char *pStrings[]={"jeff", "bob","kelli","bill","joe"}; 
    char testArray[][100]={"jeff", "bob","kelli","bill","joe"}; 
    ArrayTest(testArray,5); 

    insertionSort(pStrings, 5); 


    return 0; 
} 


//Start Algorithms 

void ArrayTest(char string[][100], int size){ 
    printf("\n\nIteration Start:\n"); 

    for (int i=0;i<size;i++){ 
     printf(":%s\n",string[i]); 
    } 

} 


// Bubble Sort Start 

void bubbleSort(char *pStringPointers[], int size){ 

    char unsorted=1; 

    while(unsorted){ 
     unsorted=0; 
     for(int i=1;i<size;i++){ 
      if(strcmp(pStringPointers[i-1],pStringPointers[i])>0) 
      { 
       swap(&(pStringPointers[i-1]), &(pStringPointers[i])); 
       unsorted=1; 
      } 
     } 
    } 

} 

// Bubble Sort End 


// Insertion Sort Start 

void insertionSort(char *pS[], int size){ 
    int i,j; 

    for(i=1;i<size;i++){ 
     printf("\n\nIteration Start:\n"); 
     for (int i=0;i<size;i++){ 
      printf(":%s\n",pS[i]); 
     } 
     char *temp2=pS[i]; 
     j=i-1; 
     while(j>=0&&strcmp(pS[j],temp2)>0){ 

      swap(&(pS[i]),&(pS[j])); 
      j--; 
     } 
     pS[j+1]=pS[i]; 

    } 
} 



// Insertion Sort End 


//End Algorithms 

void swap(char **pString1, char **pString2){ 
    char *temp=*pString1; 
    *pString1=*pString2; 
    *pString2=temp; 
} 

如果您有任何建議,請讓我知道。

回答

1

你不應該爲你去騰出空間比較pS[i]pS[j],而是pS[j]pS[j+1],因爲你轉移了舊元素 - 要插入的元素將永遠是旁邊j個一。

pS[j+1] = pS[i];不應該在那裏 - 您已經完成了交換。

這爲我們提供了這樣的事情:

for(i = 1; i < size; i++){ 
    printf("\n\nIteration Start:\n"); 
    for (int j = 0; j < size; j++){ 
     printf(":%s\n", pS[j]); 
    } 
    j = i-1; 
    while(j >= 0 && strcmp(pS[j], pS[j+1]) > 0){ 
     swap(&(pS[j+1]), &(pS[j])); 
     j--; 
    } 
} 

Test