簡體   English   中英

C插入排序錯誤

[英]Error with c insertion sort

我正在進行ac插入排序,除了在排序后第一個數字始終是一個怪異的負數並且程序出錯之外,它工作正常。

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

void insertionSort(int list[], int last){
     int hold;
     int walker;
     int current;
     int count;

     count = 0;
     for (current = 1; current <= last; current++){
         hold = list[current];
         for (walker = current - 1; 
             walker >= 0 && hold < list[walker]; walker--){
                    list[walker + 1] = list[walker];
             }
         list [walker + 1] = hold;
         count++;
     }
     printf("\n\nHow many passes to sort?\n%d\n\n", count);
     return;
}

int main(int argc, char *argv[])
{
  int numbers[100];
  int i;

  srand(time(NULL));
  for (i = 0; i < 100; i++){
      numbers[i] = rand() % 100;
  }
  printf("Unsorted Numbers\n-------- -------\n");
  for (i = 0; i < 100; i++){
      printf("%d,", numbers[i]);
  }
  insertionSort(numbers, 100);
  printf("\nSorted Numbers\n-------- -------\n");
  for (i = 0; i < 100; i++){
      printf("%d,", numbers[i]);
  }
  system("PAUSE");  
  return 0;
}

您將遍歷循環中的數組大小。 當current = last時,list [last]是list [100],即數組的第101個元素...也不好。

編輯。 我只是測試了一下,它對我有用。 我唯一改變的是外循環中的<= n <

void insertionSort(int list[], int last){
 int hold;
 int walker;
 int current;
 int count;

 count = 0;
 for (current = 1; current < last; current++){
     hold = list[current];
     for (walker = current - 1; 
         walker >= 0 && hold < list[walker]; walker--){
                list[walker + 1] = list[walker];
         }
     list [walker + 1] = hold;
     count++;
 }
 printf("\n\nHow many passes to sort?\n%d\n\n", count);
 return;
}

如果你聲明一個像

int numbers[100]

數字[99]是最后一個元素。 在排序功能中,您也正在訪問數字[100]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM