c - 我需要帮助编写对数组进行冒泡排序的代码

标签 c

我需要编写一个C程序对数组进行冒泡排序,条件是如果数组之间的任何位置被排序,它应该停止排序。 前任: 如果我输入 1 2 3 4 5,它不应该开始排序,它应该说数组已经排序

最佳答案

先生,我通过考试了吗?

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

void bubble_sort( int a[], size_t n )
{
    int sorted = 1;

    for ( size_t i = 0; sorted && ++i < n;  )
    {
        sorted = !( a[i] < a[i-1] );
    }

    if ( sorted )
    {
        puts( "The array is already sorted" );
        return;
    }

    while ( !sorted && 1 < n-- )
    {
        int *prev = a, *next = a;

        sorted = 1;

        for ( size_t i = 0; i < n; ++i )
        {
            ++next;
            if ( *next < *prev ) 
            {
                int tmp = *prev;
                *prev = *next;
                *next = tmp;

                sorted = 0;
            }
            ++prev;
        }
    }
}

#define N   10

int main( void )
{
    int a[N] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } ;

    for ( size_t i = 0; i < N; i++ ) printf( "%d ", a[i] );
    printf( "\n" );

    bubble_sort( a, N );

    for ( size_t i = 0; i < N; i++ ) printf( "%d ", a[i] );
    printf( "\n\n" );

    srand( ( unsigned int )time( NULL ) );

    for ( size_t i = 0; i < N; i++ ) a[i] = rand() % N;

    for ( size_t i = 0; i < N; i++ ) printf( "%d ", a[i] );
    printf( "\n" );

    bubble_sort( a, N );

    for ( size_t i = 0; i < N; i++ ) printf( "%d ", a[i] );
    printf( "\n" );
}

程序输出可能如下所示

0 1 2 3 4 5 6 7 8 9 
The array is already sorted
0 1 2 3 4 5 6 7 8 9 

5 2 8 6 4 3 8 6 6 5 
2 3 4 5 5 6 6 6 8 8 

关于c - 我需要帮助编写对数组进行冒泡排序的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30283658/

相关文章:

c - MPI 中是否有一种方法类似于 MPI_Bcast 但针对单个进程,而不是对整个通信器进行操作?

C 到 Mips 转换嵌套函数哪些寄存器保存在堆栈上?

javascript - Awesomium C 没有来自 awe_webview_set_callback_js_callback 的响应

c - C语言中如何重置字符串

c - 如何在这种情况下检测新行

c - C 中的队列套接字连接

c - 从 gcc 中的内联汇编引用全局变量

Android NDK C 库导致段错误

将多个 gprof 结果文件组合成一个文件

C 测试问题中的循环缓冲区实现