C语言中的冒泡排序算法

ymzxtsji  于 2023-04-05  发布在  其他
关注(0)|答案(5)|浏览(147)

我想完成的程序是一个使用冒泡排序算法的程序。我不确定问题出在哪里,或者问题出在哪个函数中。问题是程序没有正确地对数组进行排序。(它也必须按升序排列)。
下面是代码:

#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);                     
          }     
}

非常感谢。

gpnt7bae

gpnt7bae1#

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);
        }
    }
}
xjreopfe

xjreopfe2#

很确定你的问题是你的算法,试着用笔和纸来模拟你的算法。这将有助于你更好地理解你的代码和算法:)
为了您的方便,我在这里包括一个冒泡排序算法,我做了一些前一段时间

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;
            }

        }

    }

}

我希望这能帮上忙

svmlkihl

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. if(array[i]〉array[i+1])
    1.我
    1.做交换
    1.设置swap=1
    1.{\fnSimHei\bord1\shad1\pos(200,288)}
    1./**/
    1.} while(slot == 1);
    上面的例子说明了冒泡排序。
    注意。如果数据是有序的,就没有交换,也没有第二个循环。排序算法可以提前退出。
    如果一个50个元素的数组是有序的,排序将进行50次比较并将停止。前面描述的交换排序将必须进行50*49或2450次比较。
z4iuyo4d

z4iuyo4d4#

//   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]);
}
ljo96ir5

ljo96ir55#

#include <stdio.h>
#include <stdlib.h>

int main (void)
{
    //this is a buble sort algorithm
    int i, length; 
    printf("Enter the size of the array: "); 
    scanf("%d",&length); 
    int arr[length]; 
    printf("\n"); 
    for(i=0; i < length; i++) 
    { 
        printf("Enter %d. element of the array: ",i+1); 
        scanf("%d",&arr[i]); 
    } 
    
    //loop of its size
    for (int n = 0; n < length; n++)
    {
        //break flag of change
        int changed = 1;
        //loop of its size-n (n++) each time 
        for (int i = 0; i < length - n - 1; i++)
        {
            //compare i th with i+1 th element, if ith element is bigger than i+1th
            if (arr[i] > arr[i + 1])
            {
                //swap them
                int var = arr[i];
                arr[i] = arr[i + 1];
                arr[i + 1] = var;
                changed = 0;
            }
        
        }
        if (changed)
        {
            break;
        }
        
    }

printf("Sorted array: [");
for (int l = 0; l < length - 1; l++)
{
    printf("%i ", arr[l]);
}
printf("%i]\n", arr[length-1]);
return 0;

}

相关问题