第六周学习总结

一、本周主要学习了一维数组的相关知识,并初步了解了选择法排序,二分法,冒泡排序。

二、选择法排序

选择排序的算法步骤如下:

0步:在未排序的n个数(a[0]〜 a[n1])中找到最大数,将它与 a[0]交换;

1步:在剩下未排序的n1个数(a[1] 〜 a[n1])中找到最大数,将它与 a[1] 交换;

……

k步:在剩下未排序的nk个数(a[k]a[n1])中找到最大数,将它与 a[k] 交换;

 

例:要求将给定的n个整数从大到小排序后输出

#include<stdio.h>
int main()
{
    int n, a[10], i, j, t;
    scanf("%d", &n);
    for(i=0;i<n;i++)
    {
        scanf("%d", &a[i]);
    }
    for(i=0;i<n;i++)
    {
        for(j=i;j<n;j++)
        {
            if(a[i]<a[j])
            {
                t=a[i];
                a[i]=a[j];
                a[j]=t;
            }
        }
    }
    printf("%d", a[0]);
    for(i=1;i<n;i++)
        printf(" %d", a[i]);
}

三、冒泡排序

冒泡排序的算法步骤描述如下:

1步:在未排序的n个数(a[0]〜 a[n1])中,从a[0]起,依次比较相邻的两个数,若邻接元素不符合次序要求,则对它们进行交换。本次操作后,数组中的最大元素“冒泡”到a[n1];

2步:在剩下未排序的n1个数(a[0] 〜 a[n2])中,从a[0]起,依次比较相邻的两个数,若邻接元素不符合次序要求,则对它们进行交换。本次操作后,a[0] 〜 a[n2]中的最大元素“冒泡”到a[n2];

……

i步:在剩下未排序的nk个数(a[0]a[ni])中,从a[0]起,依次比较相邻的两个数,若邻接元素不符合次序要求,则对它们进行交换。本次操作后,a[0] 〜 a[ni]中的最大元素“冒泡”到a[ni];

例:将一组数从小到大排序

#include<stdio.h>
int main ()
{
    int a[10],n,i,j,temp;
    scanf("%d\n",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    if(n==1)
    {
        printf("%d",a[0]);
    }
    for(j=0;j<n-1;j++)
    {
        for(i=0;i<n-1-j;i++)
        {
            if(a[i]>a[i+1])
           {
            temp=a[i+1];
            a[i+1]=a[i];
            a[i]=temp;
           }
        }
    }
    for(i=0;i<n;i++)
        {
            if(i==0)
              printf("%d",a[i]);
            else
              printf(" %d",a[i]);
            if(i==n-1)
              printf("\n");
        }
}

三、两个算法比较

冒泡简单但时间长。

选择法一次只比较两个数,效率低。

四、二维数组

本周还自主学习了二维数组。

我们可以把二维数组看作线代里的矩阵,要注意观察各坐标之间的关系,行列关系等等

 

posted @ 2021-10-31 16:20  高宇煌  阅读(46)  评论(0编辑  收藏  举报