冒泡排序变体中的 C 段错误

标签 c segmentation-fault bubble-sort

我的代码如下:

  void bubbleSort(char *array, int size){
   int sorted = 0;
   int x;
   while(!sorted){
      int start = 0; 
      int stop = size; 

    sorted = 1;
    for(x = start; x < stop; x++){
        if(array[x] > array[x+1]){
            swap(array[x], array[x+1]);
            sorted = 0;
        }
    }
    if(sorted){
        break;
    }
    sorted = 1;
    for(x = stop; x > start; x--){
        if(array[x-1] > array[x]){
            swap(array[x], array[x-1]);
            sorted = 0;
        }
    }
 }
 }

并基于算法:

 sorted = false
 while (!sorted){

  start = start element of sublist.
  stop = stop element of sublist.

  sorted = true
  for (x = start; x < stop  ; x++){
     if Numbers[x] > Numbers[x+1]{
        swap(Numbers[x], Numbers[x+1]);
        sorted = false;
     }
  }

  if (sorted) break;

  sorted = true
  for (x = stop; x > start ; x--){
     if Numbers[x-1] > Numbers[x]{
        swap(Numbers[x], Numbers[x-1]);
        sorted = false;
     }
  }
}

这是经典冒泡排序的变体,因为每次都处理完整列表,并且排序是双向执行的。 任何帮助将不胜感激。

最佳答案

使用 sizeof 获取数组的大小在 C 语言中很棘手,它仅在应用于原始数组时才会为您提供正确的答案。例如,

int array[10];
int len = sizeof(array); // => 10 * sizeof(int)

然而,当应用于指针时,就像您在 bubbleSort 函数中所做的那样,它仅给出 int 指针的大小。您必须将数组的大小与指向函数的指针一起传递。

关于冒泡排序变体中的 C 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29024905/

相关文章:

c++ - 冒泡排序链表 C++

java - 为什么我的冒泡排序不起作用? - java

c - VirtualBox 无法加载 .img 或 .flp 文件

c - 为什么我的程序在 linux-gcc 中出现段错误,但在 mingw-gcc 中却没有?

c - MiniDumpWriteDump 段错误?

mips - 在SIGSEGV上显示_Unwind_Backtrace

Java-使用compareTo()方法手动对字符串数组进行排序

c - 为什么 `.` 和 `..` 在 Mac 上的 `/` 内部有不同的 inode 编号?

c - 是否有任何快速算法来计算所有 2 的幂的数字的 log2?

c - 在 C 中使用 typedef 结构时取消引用指向不完整类型错误的指针