2013-10-26 1 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.

Смежные вопросы