排序功能无法正常工作(冒泡排序)-c
sort function not working properly (bubble sort) - c
我的排序函数遇到了一些问题,它也使用交换函数来工作。我一直在努力寻找我的错误,但找不到。其余代码运行良好,只有排序功能不起作用(它不对任何内容进行排序。)
我会在这里留下代码,如果有人对如何解决我的问题有任何想法,请回复。
#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)] != '[=10=]')
{
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);
}
}
void sort(int *values, int n)
{
int count = 1;
while(count != 0)
{
count = 0;
for (int i = 0; i < n-1; i++) {
if(values[i] > values[(i + 1)] )
{
swap(values, i);
count++;
}
//if (count == 0) break;
}
}
}
我怀疑这永远不会是真的 values[(i + 1)] != '[=11=]'
因为值是整数..所以 运行 for 循环直到条件 i<n-1
可以正常工作,因为你正在交换 i+1
元素与 i
.
而且 for 循环中的 if (count == 0) break;
应该被删除,因为如果有像 2 3 2 1
这样的输入,循环就会中断,所以不会排序 .
这是您的 sort()
函数的更新版本:
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)] != '[=10=]')
{
swap(values, i);
count++;
}
}
}
}
即使您检查数组的初始值,您的 if(count==0) break;
语句也会退出 for
循环。因此,例如 [5 6 9 8] 将退出,因为 count
在检查前两项时为 0。
如果要使用sort()函数,需要添加算法头文件。但它不适用于 c。如果您添加 using namespace std;
然后它会起作用。然后你必须这样打电话。
sort(ela, ela+arraysize);
您可以像下面这样编辑您的排序功能。以上回答也不错
void Sort(int *values, int n)
{
int cnt=0;
while(1)
{
cnt++;
if(cnt==n-1)
break;
for (int i = 0; i < n-cnt; i++)
{
if(values[i] > values[(i + 1)] && values[(i + 1)] != '[=11=]')
{
swap(values, i);
}
}
}
}
您的冒泡排序函数有误。
这是一个演示程序,展示了如何编写该函数
#include <stdio.h>
void swap( int a[], size_t i )
{
int tmp = a[i];
a[i] = a[i+1];
a[i+1] = tmp;
}
void bubble_sort( int a[], size_t n )
{
for ( _Bool sorted = 0; n-- != 0 && !sorted; )
{
sorted = 1;
for ( size_t i = 0; i < n; i++ )
{
if ( a[i+1] < a[i] )
{
sorted = 0;
swap( a, i );
}
}
}
}
int main(void)
{
int a[] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
const size_t N = sizeof( a ) / sizeof( *a );
for ( size_t i = 0; i < N; i++ ) printf( "%d ", a[i] );
printf( "\n" );
bubble_sort( a, N );
for ( size_t i = 0; i < N; i++ ) printf( "%d ", a[i] );
printf( "\n" );
return 0;
}
输出为
9 8 7 6 5 4 3 2 1 0
0 1 2 3 4 5 6 7 8 9
我的排序函数遇到了一些问题,它也使用交换函数来工作。我一直在努力寻找我的错误,但找不到。其余代码运行良好,只有排序功能不起作用(它不对任何内容进行排序。)
我会在这里留下代码,如果有人对如何解决我的问题有任何想法,请回复。
#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)] != '[=10=]')
{
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);
}
}
void sort(int *values, int n)
{
int count = 1;
while(count != 0)
{
count = 0;
for (int i = 0; i < n-1; i++) {
if(values[i] > values[(i + 1)] )
{
swap(values, i);
count++;
}
//if (count == 0) break;
}
}
}
我怀疑这永远不会是真的 values[(i + 1)] != '[=11=]'
因为值是整数..所以 运行 for 循环直到条件 i<n-1
可以正常工作,因为你正在交换 i+1
元素与 i
.
而且 for 循环中的 if (count == 0) break;
应该被删除,因为如果有像 2 3 2 1
这样的输入,循环就会中断,所以不会排序 .
这是您的 sort()
函数的更新版本:
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)] != '[=10=]')
{
swap(values, i);
count++;
}
}
}
}
即使您检查数组的初始值,您的 if(count==0) break;
语句也会退出 for
循环。因此,例如 [5 6 9 8] 将退出,因为 count
在检查前两项时为 0。
如果要使用sort()函数,需要添加算法头文件。但它不适用于 c。如果您添加 using namespace std;
然后它会起作用。然后你必须这样打电话。
sort(ela, ela+arraysize);
您可以像下面这样编辑您的排序功能。以上回答也不错
void Sort(int *values, int n)
{
int cnt=0;
while(1)
{
cnt++;
if(cnt==n-1)
break;
for (int i = 0; i < n-cnt; i++)
{
if(values[i] > values[(i + 1)] && values[(i + 1)] != '[=11=]')
{
swap(values, i);
}
}
}
}
您的冒泡排序函数有误。
这是一个演示程序,展示了如何编写该函数
#include <stdio.h>
void swap( int a[], size_t i )
{
int tmp = a[i];
a[i] = a[i+1];
a[i+1] = tmp;
}
void bubble_sort( int a[], size_t n )
{
for ( _Bool sorted = 0; n-- != 0 && !sorted; )
{
sorted = 1;
for ( size_t i = 0; i < n; i++ )
{
if ( a[i+1] < a[i] )
{
sorted = 0;
swap( a, i );
}
}
}
}
int main(void)
{
int a[] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
const size_t N = sizeof( a ) / sizeof( *a );
for ( size_t i = 0; i < N; i++ ) printf( "%d ", a[i] );
printf( "\n" );
bubble_sort( a, N );
for ( size_t i = 0; i < N; i++ ) printf( "%d ", a[i] );
printf( "\n" );
return 0;
}
输出为
9 8 7 6 5 4 3 2 1 0
0 1 2 3 4 5 6 7 8 9