C中的气泡排序:垃圾值错误

问题描述 投票:-2回答:2

所以最近我一直在学习C语言中的数据结构。现在让我们来解决我的问题

这是我的冒泡排序算法代码

#include <conio.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>

void swap(int *p, int *q) {
  int temp = *p;
  *p = *q;
  *q = temp;
}

int main() {
  int arr[] = {2, 4, 1, 3, 5, 2, 3, 6, 4};  // see below for arr
  int len = sizeof(arr) / sizeof(int);
  for (int i = len - 1; i >= 0; i--) {
    for (int j = 0; j <= i; j++) {
      if (arr[j] < arr[j + 1]) {
        swap(&arr[j], &arr[j + 1]);
      }
    }
  }
  for (int m = 0; m < len; m++) {
    printf("%d\t", arr[m]);
  }
  return 0;
}

当我的数组像是:int arr[]={2,4,1,3,5,2,6,10};时,它的排序是完美的,但是当我将arr中的值的数量增加一时,它将开始提供垃圾值。

例如:int arr[]={2,4,1,3,5,2,6,10,13};输出:int arr[]={2,4,1,3,5,2,6,10};

高度赞赏的详细Anwer

c algorithm data-structures computer-science bubble-sort
2个回答
1
投票

[j=ii=len-1(在j上的循环中允许)时进行检查:

        if(arr[j]<arr[j+1]){
            swap(&arr[j],&arr[j+1]);
        }

超出arr的范围。另外,即使对于i的较小值,也不需要最后检查。要修复代码,请使循环条件为j < i而不是j <= i


0
投票

使您像这样循环,您将永远不会出现“一举成名”错误:

for (int i = 0; i < len; i++) {
    for (int j = i+1; j < len; j++) {
        if (arr[j] < arr[i]) {
            swap(&arr[i], &arr[j]);
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.