第六周学习总结
作者:互联网
一、本周主要学习了一维数组的相关知识,并初步了解了选择法排序,二分法,冒泡排序。
二、选择法排序
选择排序的算法步骤如下:
第0步:在未排序的n个数(a[0]〜 a[n−1])中找到最大数,将它与 a[0]交换;
第1步:在剩下未排序的n−1个数(a[1] 〜 a[n−1])中找到最大数,将它与 a[1] 交换;
……
第k步:在剩下未排序的n−k个数(a[k]〜a[n−1])中找到最大数,将它与 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[n−1])中,从a[0]起,依次比较相邻的两个数,若邻接元素不符合次序要求,则对它们进行交换。本次操作后,数组中的最大元素“冒泡”到a[n−1];
第2步:在剩下未排序的n−1个数(a[0] 〜 a[n−2])中,从a[0]起,依次比较相邻的两个数,若邻接元素不符合次序要求,则对它们进行交换。本次操作后,a[0] 〜 a[n−2]中的最大元素“冒泡”到a[n−2];
……
第i步:在剩下未排序的n−k个数(a[0]〜a[n−i])中,从a[0]起,依次比较相邻的两个数,若邻接元素不符合次序要求,则对它们进行交换。本次操作后,a[0] 〜 a[n−i]中的最大元素“冒泡”到a[n−i];
例:将一组数从小到大排序
#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"); } }
三、两个算法比较
冒泡简单但时间长。
选择法一次只比较两个数,效率低。
四、二维数组
本周还自主学习了二维数组。
我们可以把二维数组看作线代里的矩阵,要注意观察各坐标之间的关系,行列关系等等
标签:总结,学习,int,元素,个数,第六周,冒泡,数组,排序 来源: https://www.cnblogs.com/gyh-0-2-1-8-/p/15489876.html