二级C语言 程序设计题

按题目要求编写完整功能代码,参考答案点击按钮展开

79程序设计题:冒泡排序对数组升序排列

编写函数 fun,用冒泡排序算法将数组 a 的 n 个整数升序排列。例如 {5,2,8,1,9,3} → {1,2,3,5,8,9}。

#include <stdio.h>
/* 函数功能:用冒泡排序将数组 a 的 n 个整数升序排列。
   请在下方编写 fun 函数体。 */
void fun(int a[], int n)
{
    /* 请在这里编写代码 */

}

int main()
{
    int a[] = {5,2,8,1,9,3};
    int i;
    fun(a, 6);
    printf("排序后: ");
    for(i=0; i<6; i++) printf("%d ", a[i]);
    printf("\n");
    return 0;
}
参考答案
void fun(int a[], int n)
{
int i, j, t;
for(i=0; i<n-1; i++)
{
for(j=0; j<n-1-i; j++)
{
if(a[j] > a[j+1])
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
}
解析

考点:冒泡排序。外层 i 从 0 到 n-2(共 n-1 趟),内层 j 从 0 到 n-2-i(每趟少比一个,因为最后 i+1 个已排好)。相邻元素 a[j] 与 a[j+1] 比,前大后小就交换。升序用 >,降序用 <。每趟把最大值'冒泡'到末尾。时间复杂度 O(n²)。