【发布时间】:2020-04-19 01:33:53
【问题描述】:
我正在学习数据结构和算法。该程序在一个数组中获取一组输入,并使用归并排序对它们进行排序。条件是当子数组的大小等于或小于 10 时,它应该使用 冒泡排序 对元素进行排序,然后将它们合并在一起。我的问题是让程序进行冒泡排序。到目前为止,我一直无法找出程序中的错误。我仍然每天都在学习。如果有人可以帮助我找到错误并修复它,我将不胜感激。非常感谢,祝您愉快。
代码如下:
#include<stdio.h>
#include<stdlib.h>
#define arrsize 10
void merge_sort(int, int);
void merge_array(int, int, int, int);
int arr_sort[arrsize];
void bubblesort(int a[],int size);
void main()
{
int a[50],n,i;
printf("\nEnter %d Elements for Sorting\n", arrsize);
for (i = 0; i < arrsize; i++)
scanf("%d", &arr_sort[i]);
printf("\nYour Data :");
for (i = 0; i < arrsize; i++) {
printf("\t%d", arr_sort[i]);
}
merge_sort(0, arrsize - 1);
printf("\n\nSorted Data :");
for (i = 0; i < arrsize; i++) {
printf("\t%d", arr_sort[i]);
}
}
void bubblesort(int arr_sort[],int size)
{
int temp,i,j;
for(i=0;i<size;i++)
{
for(j=0;j<size-1;j++)
{
if(arr_sort[j]>arr_sort[j+1])
{
temp=arr_sort[j];
arr_sort[j]=arr_sort[j+1];
arr_sort[j+1]=temp;
}
}
}
}
void merge_sort(int i, int j) {
int m;
if (i < j) {
m = (i + j) / 2;
if(m<=5)
{
for(i=0;i<=m;i++){
for(j=i+1;j<=m;j++){
bubblesort(arr_sort[i],m);
bubblesort(arr_sort[j],m);}}
merge_array(i,m,m+1,j);
}
else
merge_sort(i, m);
merge_sort(m + 1, j);
merge_array(i, m, m + 1, j);
}
}
void merge_array(int a, int b, int c, int d) {
int t[50];
int i = a, j = c, k = 0;
while (i <= b && j <= d) {
if (arr_sort[i] < arr_sort[j])
t[k++] = arr_sort[i++];
else
t[k++] = arr_sort[j++];
}
while (i <= b)
t[k++] = arr_sort[i++];
while (j <= d)
t[k++] = arr_sort[j++];
for (i = a, j = 0; i <= d; i++, j++)
arr_sort[i] = t[j];
}
【问题讨论】:
-
您需要明确描述问题。是不是排序不正确?是不是报错了?
-
冒泡排序不起作用。
-
缩进和嵌套级别使您的代码难以辨认。
bubblesort的函数定义在我看来是正确的,尽管效率低下。但是bubblesort(arr_sort[i],m);和bubblesort(arr_sort[j],m);的调用是公然错误的。而且void main()不可移植。 -
@lxer 如果你能帮我修复它会很好
-
首先,确保
merge_sort函数正确运行,不会退回到冒泡排序。然后检查进入merge_sort函数时要排序的元素数。如果该数字小于截止值,则调用冒泡排序函数并返回。否则继续。
标签: c algorithm sorting mergesort array-merge