数组排序(交换法与选择法)
来源:互联网 发布:知乎 真名 编辑:程序博客网 时间:2024/06/06 03:04
交换法与选择法降序排序
交换法
交换法对数组数组进行排序的基本思路 就是先让数组(n个数)中的最左边的一个数(用i=0代表)与其右边的每一个数(从j=i+1开始)依次(j++)进行比较,若遇到比其大的数(score[j]>score[i]),则将较大的那个数的值赋给自己,自己成为较大数继续与后面的数比较,以此类推,一轮后(即j=n时),让i自增1,重复上述循环直至i=n-1.
下面以一个有5个数的数组演示交换法排序:
#include <stdio.h>void main(){ int i,j,temp; int score[5]={10,20,30,40,50}; int n=5; for (i=0;i<=n-1;i++) { for (j=i+1;j<=n;j++) { if(score[j]>score[i]) { temp=score[j]; score[j]=score[i]; score[i]=temp; } } } for(i=0;i<=n-1;i++) { printf("score[%d]= %d\n",i,score[i]); }}
选择法
选择法基本思路与交换法大致相似,不同点是交换法在一轮中要比较交换多次,而选择法是一轮中比较多次,而最多交换一次。选择法也是从i=0开始比较,遇到较大的数(score[j]>score[k](k在一开始是等于i的))则交换下标,最后若k 不等于i,则score[k]与score[i]交换位置。
同样以上述的数组用选择法来排序:
#include <stdio.h>void main(){ int i,j,temp,k; int score[5]={10,20,30,40,50}; int n=5; for (i=0;i<=n-1;i++) { k=i; for (j=i+1;j<=n;j++) { if (score[j]>score[k]) { k=j; } } if (k!=i) { temp=score[k]; score[k]=score[i]; score[i]=temp; } } for(i=0;i<=n-1;i++) { printf("score[%d]= %d\n",i,score[i]); }}
总结
选择法建立在交换法之上,但因交换次数较少,故效率较高
阅读全文
1 0
- 数组排序(交换法与选择法)
- 数组排序,交换法,选择法
- 数组交换排序法
- 数组排序(选择法)
- 数组与集合的应用之数组排序与查询(使用选择排序法)
- 排序:插入排序/选择排序/交换排序(冒泡法)
- 数组 选择法排序
- 数组选择排序法
- PHP快速排序法(数组排序)与简单选择排序
- 选择法---排序(一维数组)
- 解析选择排序法与冒泡排序法的区别(数组实现和指针实现)
- 数组的选择排序法。
- Java数组&选择排序法
- C语言 选择排序、折半查找法与二维数组
- (学习笔记)数组排序 冒泡式排序法 交换式排序法
- 数组的排序 选择排序法
- 选择排序法为数组排序
- 【内部排序】 交换排序与选择排序详解
- 事件是如何工作的?
- K-近邻算法(KNN)
- git服务器gitlab之搭建和使用
- Mybatis中#{}和${}传参的区别及#和$的区别小结
- 【并查集】Codeforces 566D Restructuring Company
- 数组排序(交换法与选择法)
- java虚拟机架构
- HDU4287 Intelligent IME(Trie树,map)
- 连接数据库SQL并验证账号密码(2)
- 前后端数据对接
- 学生信息管理系统优化
- C++风格_规则特例
- 程序流程控制
- noip2015 游记+总结+题解