我想完成的程序是一个使用冒泡排序算法的程序。我不确定问题出在哪里,或者问题出在哪个函数中。问题是程序没有正确地对数组进行排序。(它也必须按升序排列)。
下面是代码:
#include <stdio.h>
#include "simpio.h"
void getArray (int arr[], int size);
void sortArray (int arr[], int size);
void swap (int arr[], int num, int number);
void dispArray (int arr[], int size);
bool checkBigger (int arr[], int num, int number);
main()
{
int size;
printf("Enter number of elements: ");
size=GetInteger();
int arr[size];
getArray(arr, size);
sortArray(arr, size);
dispArray(arr, size);
getchar();
}
void getArray (int arr[], int size)
{
int num;
printf("Please enter the value of the elements: \n");
for(num=0; num<size; num++)
{
arr[num]=GetInteger();
}
}
void sortArray (int arr[], int size)
{
int num, number, d;
for(num=0;num<size-1;num++)
{
for(d=0; d<size-num-1; d++)
{
number=num+1;
checkBigger(arr, num, number);
}
}
}
void swap (int arr[], int num, int number)
{
int tem;
tem=arr[num];
arr[num]=arr[number];
arr[number]=tem;
}
void dispArray (int arr[], int size)
{
int num;
printf("The sorted list is:\n");
for(num=0; num<size; num++)
{
printf("%d\t", arr[num]);
}
}
bool checkBigger (int arr[], int num, int number)
{
if(arr[num]>arr[number])
{
swap(arr, num, number);
}
}
非常感谢。
5条答案
按热度按时间gpnt7bae1#
xjreopfe2#
很确定你的问题是你的算法,试着用笔和纸来模拟你的算法。这将有助于你更好地理解你的代码和算法:)
为了您的方便,我在这里包括一个冒泡排序算法,我做了一些前一段时间
我希望这能帮上忙
svmlkihl3#
我从上面的例子中得到的只是交换排序的一个实现。
外部循环上的交换排序检查表中的每个条目与第一个元素,在必要时交换。然后在内部循环结束时,最低的元素位于位置1,然后从位置2开始,将其与其余元素进行比较,并进行交换。即使数组已经按顺序排列,排序不能停止。它必须进行n*(n-1)次比较。一个50个元素的数组,已经排序将进行50*49次比较。
冒泡排序的工作方式不同
将swap标志设置为零。然后沿着数组滑动,比较position(i)和position(i+1)。如果发生了swap,则再次进行排序。
下面是一些伪代码。
1.交换= 0
1.做{
1.对于(i= 0;i〈no-elements-1;i++){
1.我
1.做交换
1.设置swap=1
1.{\fnSimHei\bord1\shad1\pos(200,288)}
1./**/
1.} while(slot == 1);
上面的例子说明了冒泡排序。
注意。如果数据是有序的,就没有交换,也没有第二个循环。排序算法可以提前退出。
如果一个50个元素的数组是有序的,排序将进行50次比较并将停止。前面描述的交换排序将必须进行50*49或2450次比较。
z4iuyo4d4#
ljo96ir55#
}