《C语言及程序设计》实践参考——数组的排序

简介: 返回:贺老师课程教学链接  项目要求【项目3 - 数组的排序】(1)编写函数,完成冒泡排序要求不能改变下面的main函数。//两个函数bubble_sort和output_array的声明 int main( ){ int a[20]={86,76,62,58,77,85,92,80,96,88,77,67,80,68,88,87,64,59,61,76};

返回:贺老师课程教学链接  项目要求


【项目3 - 数组的排序】
(1)编写函数,完成冒泡排序
要求不能改变下面的main函数。

//两个函数bubble_sort和output_array的声明
   
int main( )
{
    int a[20]={86,76,62,58,77,85,92,80,96,88,77,67,80,68,88,87,64,59,61,76};
    int b[15]={27,61,49,88,4,20,28,31,42,62,64,14,88,27,73};
    bubble_sort(a,20);   //用冒泡法按降序排序a中元素
    output_array(a,20);   //输出排序后的数组
    bubble_sort(b,15);   //用冒泡法按降序排序b中元素
    output_array(b,15);   //输出排序后的数组
    return 0;
}
//请在下面定义bubble_sort和output_array函数
[参考解答]

#include<stdio.h>
void bubble_sort(int arr[], int num);
void output_array(int arr[], int num);
int main( )
{
    int a[20]= {86,76,62,58,77,85,92,80,96,88,77,67,80,68,88,87,64,59,61,76};
    int b[15]= {27,61,49,88,4,20,28,31,42,62,64,14,88,27,73};
    bubble_sort(a,20);   //用冒泡法按降序排序a中元素
    output_array(a,20);   //输出排序后的数组
    bubble_sort(b,15);   //用冒泡法按降序排序b中元素
    output_array(b,15);   //输出排序后的数组
    return 0;
}
//下面定义自定义函数
void bubble_sort(int arr[], int num)
{
    int i,j,t;
    for(j=0; j<num-1; j++)   //共进行num-1趟比较
        for(i=0; i<num-j-1; i++) //在每趟中要进行num-j次两两比较
            if (arr[i]<arr[i+1]) //如果前面的数小于后面的数
            {
                t=arr[i]; //交换两个数的位置,使小数下沉
                arr[i]=arr[i+1];
                arr[i+1]=t;
            }
    return;
}
void output_array(int arr[], int num)
{
    int i;
    for(i=0; i<num-1; i++)
        printf("%d, ", arr[i]);
     printf("%d\n",arr[num-1]);
    return;
}

(2)字符数组排序:改造(1)的程序,使其能对字符数组进行排序,其中:
int a[20]={...};
int b[15]={...};
改为
char a[20] = {'s','o','r','t','b','u','b','b','l','e','s','e','l','e','c','t','o','k','o','k'};
char b[15] = {'a','b','a',...};  //自己补足
[参考解答]

#include<stdio.h>
void bubble_sort(char arr[], int num);
void output_array(char arr[], int num);
int main( )
{
    char a[20]= {'s','o','r','t','b','u','b','b','l','e','s','e','l','e','c','t','o','k','o','k'};
    char b[15]= {'s','o','r','t','b','u','b','b','l','e','s','e','l','e','c'};
    bubble_sort(a,20);   //用冒泡法按降序排序a中元素
    output_array(a,20);   //输出排序后的数组
    bubble_sort(b,15);
    output_array(b,15);
    return 0;
}
//下面定义自定义函数
void bubble_sort(char arr[], int num)
{
    int i,j;
    char t;
    for(j=0; j<num-1; j++)
        for(i=0; i<num-j-1; i++)
            if (arr[i]<arr[i+1])
            {
                t=arr[i];
                arr[i]=arr[i+1];
                arr[i+1]=t;
            }
    return;
}

void output_array(char arr[], int num)
{
    int i;
    for(i=0; i<num-1; i++)
        printf("%c, ", arr[i]);
     printf("%c\n",arr[num-1]);
    return;
}

(3)体验选择排序:改造(1)的程序,将bubble_sort(...)改为select_sort(...),排序算法由冒泡排序换作为选择排序,排序结果由降序变为升序,完成类似的任务。

[参考解答]

#include<stdio.h>
void select_sort(int arr[], int num);
void output_array(int arr[], int num);
int main( )
{
    int a[20]= {86,76,62,58,77,85,92,80,96,88,77,67,80,68,88,87,64,59,61,76};
    int b[15]= {27,61,49,88,4,20,28,31,42,62,64,14,88,27,73};
    select_sort(a,20);   //用冒泡法按降序排序a中元素
    output_array(a,20);   //输出排序后的数组
    select_sort(b,15);   //用冒泡法按降序排序b中元素
    output_array(b,15);   //输出排序后的数组
    return 0;
}
//下面定义自定义函数
void select_sort(int array[],int n) //形参array是数组名
{
    int i,j,k,t;
    for(i=0; i<n-1; i++)
    {
        k=i;  //先设第i个就为最小
        for(j=i+1; j<n; j++)
            if(array[j]<array[k])
                k=j;   //通过循环,得到k为最小
        t=array[k];    //交换a[i]和a[k]
        array[k]=array[i];
        array[i]=t;
    }
    return;
}

void output_array(int arr[], int num)
{
    int i;
    for(i=0; i<num-1; i++)
        printf("%d, ", arr[i]);
     printf("%d\n",arr[num-1]);
    return;
}


目录
相关文章
|
16天前
|
存储 编译器 C语言
C语言之数组
C语言之数组
24 0
|
6天前
|
机器学习/深度学习 C语言
C语言三维数组的创建
该代码片段展示了如何在C语言中创建一个动态的3D数组。由于`n`在编译时未知,不能直接声明为`int f[n][n][n]`。正确的方法是使用`malloc`进行动态内存分配。首先分配`n`个`int **`,然后对每一层分配`n`个`int *`,最后每个元素分配`n`个`int`。之后可以使用这个3D数组,并在完成后正确释放内存。
|
6天前
|
搜索推荐 C语言
【C语言/数据结构】排序(归并排序|计数排序|排序算法复杂度)
【C语言/数据结构】排序(归并排序|计数排序|排序算法复杂度)
11 0
|
6天前
|
C语言
【C语言/数据结构】排序(快速排序及多种优化|递归及非递归版本)
【C语言/数据结构】排序(快速排序及多种优化|递归及非递归版本)
7 0
|
6天前
|
C语言
【C语言/数据结构】排序(选择排序,推排序,冒泡排序)
【C语言/数据结构】排序(选择排序,推排序,冒泡排序)
12 0
|
6天前
|
C语言
【C语言/数据结构】排序(直接插入排序|希尔排序)
【C语言/数据结构】排序(直接插入排序|希尔排序)
13 4
|
6天前
|
存储 算法 C语言
【C 言专栏】用 C 语言开发游戏的实践
【5月更文挑战第5天】本文探讨了使用C语言开发游戏的实践,包括选择适合的游戏类型(如贪吃蛇、俄罗斯方块),设计游戏框架、图形界面和逻辑,以及音效添加。文章还强调了性能优化、测试调试、跨平台挑战及未来发展趋势。对于热衷于C语言的开发者,这是一次挑战与乐趣并存的探索之旅。
【C 言专栏】用 C 语言开发游戏的实践
|
11天前
|
存储 算法 程序员
【C言专栏】C 语言结构体的应用与实践
【4月更文挑战第30天】C语言中的结构体是自定义数据类型的关键,它组合不同类型的數據以创建新类型,尤其适合处理复杂对象如学生信息。通过定义结构体如`struct Student`,包含名字、学号和成绩,可以方便地实例化和访问成员。结构体在链表实现、函数参数传递和数组中都有广泛应用,如表示链表节点和处理批量数据。理解并熟练运用结构体对于C语言编程至关重要,能提升代码效率和可读性。
|
13天前
|
存储 缓存 算法
C语言循环语句的探讨与实践
C语言循环语句的探讨与实践
21 1
|
13天前
|
关系型数据库 MySQL 编译器
探索C语言的魅力:从基础到实践
探索C语言的魅力:从基础到实践
23 3