【发布时间】:2015-03-27 18:31:09
【问题描述】:
我的排序函数也使用交换函数工作时遇到了一些问题。我一直试图找到我的错误,但找不到它。其余代码完美运行,只有排序功能不起作用(它不会对任何内容进行排序。)
如果有人对如何解决我的问题有任何想法请回复。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void sort(int *values, int n);
void swap(int arr[], int i);
void populate(int arr[]);
const int arraysize = 10;
int main()
{
srand((long int) time(NULL));
int ela[10] = {0};
populate(ela); // populates with random values
printf("before func\n");
for(int i = 0; i < arraysize; i++)
{
printf("%i\n", ela[i]);
}
sort(ela, arraysize); // this is the function that is not working
printf("\n\nafter func\n");
for(int i = 0; i < arraysize; i++)
{
printf("%i\n", ela[i]);
}
return 0;
}
void sort(int *values, int n)
{
int count = 1;
while(count != 0)
{
count = 0;
for (int i = 0; i < n; i++) {
if(values[i] > values[(i + 1)] && values[(i + 1)] != '\0')
{
swap(values, i);
count++;
}
if (count == 0) break;
}
}
}
void swap(int arr[], int i)
{
int save = arr[i];
arr[i] = arr[i+1];
arr[i + 1] = save;
return;
}
void populate(int arr[])
{
for(int i = 0; i < arraysize; i++)
{
arr[i] = (rand() % 15);
}
}
【问题讨论】:
-
仅供参考,您永远不会在外循环中减少
n。每次扫描都会使一个元素冒泡到最后,从而减少再次击中该单元格或任何经过它的单元格的需要。while (count && n--)是首先想到的。
标签: c arrays sorting bubble-sort