使用BubbleSort对数组进行排序
Sorting array with BubbleSort
我更改了代码,但仍然不明白为什么它不会对数组进行排序。。。冒泡排序只将程序中的所有元素向右移动一个位置,而不是对数组进行排序。。。l厌倦了bsort和ssort,它们都为1位做同样的事情
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void bsort(int n,int a[])
{
int i,j,k;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1;j++)
{
if(a[j]>a[j+1]);
{
k=a[j+1];
a[j+1]=a[j];
a[j]=k;
}
}
}}
int main()
{
int i,j,k,m,n;
srand(time(0));
printf("Unesi broj clanova niza:");
scanf("%d",&n);
int a[n];
printf("Niz za sortiranje je:n");
for(int i=0;i<n;i++) //Generisanje niza
{
a[i]=rand()%(81);
}
for(int i=0;i<n;i++)
{
printf("%3d",a[i]);
}
bsort(n,a);
printf("nnSortirani niz je:n");
for(i=0;i<n;i++)
{
printf("%3d",a[i]);
}
}
您的冒泡排序实现存在几个问题。
首先,这一行:
if (a[j] > a[j + 1]); {
不正确。分号终止条件。因此,下面的块在内部循环的每一次迭代中都会执行,您最终会无条件地将a[j]
和a[j+1]
交换为j
的每一个值。这意味着你正在对数组进行一次毫无意义的重新排列。
其次,您没有正确处理内部循环中的边缘情况。当j == 19
时,访问a[j+1]
,即a[20]
,它位于数组的末尾之外。这样就可以将垃圾数据导入到数组中。
最后,即使在纠正了上面的错误之后,您的实现也是不必要的低效,因为您的内部循环在外部循环的每次迭代中都会遍历整个数组,而这不是必须的。提示:试着想想内部循环的初始化或终止条件如何取决于i
。
更新(在OP重写之后):您只解决了第二个问题。
int main() {
int a[20];
srand(time(0));
// array values initialization
for (int i = 0; i < 19; i++) {
a[i] = rand() % (81);
}
// array sorting
bsort(a);
// array printing
for (int i = 0; i < 19; i++) {
printf("%3d", a[i]);
}
}
相关文章:
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 显示错误输出的简单数组排序程序
- 为什么我的排序算法会更改数组值
- 为什么我需要C++中不同的排序格式来对这个USACO代码上的数组和优先级队列进行排序
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 合并排序不排序自创建数组类 c++
- 带有枚举方向/类型的气泡排序结构数组
- 为什么指针在对二维数组进行排序时无法正常工作?
- 排序并行数组
- 如何在数组 c++ 中对字符串进行排序
- 为什么在此排序算法实现中,向量明显比数组慢?
- 如何对不在数组中的变量进行排序?
- C++数组与向量排序(在我的情况下,向量比数组慢~2.5倍(无优化))
- 按字母顺序对结构内数组变量中的名称进行排序
- 使用排序函数 c++ 对字符数组进行排序
- 使用 std::sort 对二维 c 数组进行排序
- 使用STL对用户输入数组进行排序的错误有什么解决方案吗?
- 使用 std::sort 对 C 样式的 2D 数组进行部分排序
- 数组为此合并排序函数提供了正确的输出,但向量给出了不正确的输出.出了什么问题?
- 对 0 、1 和 2 的数组进行排序