我试图完成的程序是一个使用冒泡排序算法的程序。我不确定问题是什么或者问题在哪个函数中。问题是程序没有正确排序数组。(它也必须按升序排列)。
下面是代码:
#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);
}
}
非常感谢。
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=d+1;
checkBigger(arr, d, number);
}
}
}
pretty 确定你的问题是与你的算法,尝试用笔和纸模拟你的算法。这将有助于你更好地理解你的代码和算法:)
为了您的方便,我在这里包括一个冒泡排序算法,我做了一些前
void bubbleSort( int a[], int n)
{
int i,j,temp; // for a={1,2,3,4,5} n is 5
n = n - 1; // bcz otherwise it will get out of index
for(i=0; i<n; i++)
{
for(j=0; j<n-i; j++)
{
if(a[j]>a[j+1])
{
temp = a[j+1];
a[j+1] = a[j];
a[j] = temp;
}
}
}
}
我希望这有助于
所有我从上面的例子是交换排序的实现。
外部循环上的交换排序会根据第一个元素检查表中的每个条目,并在必要时进行交换。在内部循环结束时,最低元素位于位置 1,然后从位置 2 开始,将其与其余元素进行比较,然后进行交换。即使数组已经有序,排序也无法停止。它必须进行 n *(n-1)比较。已经排序的 50 个元素的数组将进行 50 * 49 个比较。
冒泡排序的工作方式不同
将交换标志设置为零。然后沿着数组滑动,将位置 (i) 与位置 (i + 1) 进行比较。如果发生交换,则再次进行排序。
这里是一些伪代码。
swap =0
do {
为 (i = o;i & lt;no-elements-1;i ++) {
if (array [i] & gt;array [i + 1])
{
做交换
设置交换 =1
}
/ * * /
} while (swap = = 1);
上面说明了冒泡排序。
注意。如果数据是有序的,则没有交换,也没有第二个循环。排序算法可以提前退出。
如果一个 50 个元素的数组是有序的,则排序将进行 50 个比较,并且将停止。前面描述的交换排序必须进行 50 * 49 或 2450 个比较。
// BUBBLE SORT.
#include <stdio.h>
#define MAX 20
int main()
{
int arr[MAX];int no;
printf("PLEASE ENTER THE CURRENT SIZE OF THE ARRAY\n");
scanf("%d",&no);
int i;
printf("PLEASE ENTER THE ELEMENTS OF THE ARRAY\n");
for(i=0;i<no;i++)
scanf("%d",&arr[i]); /*reading the elements*/
/* sorting begins*/
int j,k,l;
int temp;
int flag=0;
for(k=0;k<no-1;k++)
{
flag=0;
j=k;
for(i=0;i<no-j-1;i++) /* not going to the part that has been sorted*/
{
if(arr[i]>arr[i+1])
{
flag=1;
temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
else
continue;/* not necessary*/
}
if(flag==0) /*implies that the array is alraedy sorted*/
break;
}
printf("THE SORTED LIST:\n\n");
for(i=0;i<no;i++)
printf("%d\n",arr[i]);
}
本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(86条)