C语言实现直接插入与直接选择排序,详细
直接插入排序
插入排序由N-1趟排序组成,首先确定一个初始下标,这里命名位end,再保存其前一个下标对应的值(end+1),每次比较下标对应空间的值大则交换(升序),end的值随趟数的增加而增加,且每次都从后往前比较。代码如下
void InsertSort(int* data, int numb)
{assert(data)for (int i = 0; i < numb - 1; i++)//排序numb-1趟{int end = i;int tmp = data[end + 1];while (end >= 0)//最终将对所有数据从后往前比较{if (data[end] > tmp){data[end + 1] = data[end];end--;}else{break;}}data[end + 1] = tmp;//交换后原位赋上所保存值}
}int main()
{int data[] = { 2,13,4,7,5,9,1,0 };int size = sizeof(data) / sizeof(data[0]);InsertSort(data, size);for (int j = 0; j < size; j++){printf("%d ", data[j]);}return 0;
}
直接选择排序
正如名称为选择,选择大的放到最右边,小的放到最左边(升序),这里优化使用双向定位,首先在整个数据中选出最大值和最小值依次交换即可。代码如下
void SelectSort(int* data, int numb)
{int begin = 0;int end = numb - 1;//最后一个元素while (begin < end)//往中间缩进{int max, mini;max = mini = begin;//一趟交换一对后,数据范围也将改变即max和mini也将缩短范围for (int i = begin; i < end; i++)//选取大值和小值{if (data[i] > data[max]){max = i;}if (data[i] < data[mini]){mini = i;}}Swap(&data[begin], &data[mini]);//交换if (data[mini] == data[max])//若begin为max时则需改变max{max = mini;}Swap(&data[end], &data[max]);end--;begin++;}
}
C语言实现直接插入与直接选择排序,详细相关推荐
- 蛮力法查找有序数列c语言,算法——蛮力法之选择排序和冒泡排序c++实现
这次实现的是蛮力法中的两个例子,选择排序法和冒泡排序法,使用的编译环境是vs2013,下面对这两个算法做一个简单介绍,然后是两个算法的c++实现代码. 选择排序法比较的范围是整个列表,每次扫描结束找出 ...
- C语言例题11:简单选择排序
[c语言例题总结] 问题描述 简单选择排序 代码 #include<iostream> #include<cstdlib> #include<algorithm> ...
- 总结c语言基础算法——冒泡排序法和选择排序法
1.首先无论何种排序方法其最终目的是按要求将所给数据进行排序.而在C语言中可以有很多排序的方法,这里着重介绍的是常用的较为基础和重要的算法--冒泡排序法和选择排序法. 下面将举一个例子进行讲解: 要求 ...
- python:直接插入和简单选择排序
1. 直接插入排序 直接插入排序的基本思想:将一个记录插入到已排序好的有序表中,从而得到一个新记录数增加1的有序表.即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整 ...
- c语言数据结构-算法篇之选择排序
文章目录 前言 一.选择排序是什么? 二.选择排序 代码 前言 排序方法是一种重要的,基本的算法.排序的方法很多,本章就介绍选择排序 一.选择排序是什么? 第一次从R[0]~R[n-1]中选取最小值, ...
- c语言用递归的方法插入排序,c语言,递归法的选择排序。为什么运行出错。。。求赐教...
满意答案 diexun2011 2016.01.16 采纳率:49% 等级:12 已帮助:12974人 没太看懂楼主原来的意思,在原来代码的基础上修改 #include void exchang ...
- 【C语言排序问题】|区分选择排序以及起泡排序
选择排序: 每轮通过比较找出最值数字角标,明确后将目的位置(最前/后递值变化)角标进行对调.因此每轮内层循环中所有数字只进行一次两两交换. 比较环节中直接带入num与num[j]比较不妥当,应为num ...
- 排序算法的实现。用C语言编程实现冒泡排序、选择排序、插入排序、shell排序、快速排序、堆排序算法、归并排序。利用随机函数产生N个随机整数(10000以上)。
#include<stdio.h> #include <time.h> #include<stdlib.h> #define N 10000 double T, T ...
- 选择排序----详细算法分析
选择排序思路:找到乱序数组中最大元素的位置,再与乱序数组中最后一个元素位置交换,即算完成一次选择排序,再从剩下的数中找最大与剩下乱序数组中最后一个元素位置交换以此循环到排序结束 #include< ...
- C语言——十四种内部排序算法【直接插入排序-冒泡排序-选择排序-插入排序-希尔排序-归并排序-快速排序-堆排序-折半插入排序-二分查找-路插入排序-表插入排序-简单选择排序-直接选择排序-树形选择】
目录: 一:插入排序 A:直接插入排序 1.定义: 2.算法演示 实例1: 3.基本思想 4.排序流程图 实例1: B:希尔排序 1.定义: 2.算法演示 实例2: C:其他插入排序 a:折半插入排序 ...
最新文章
- 让Windows下的Tomcat将控制台信息记录到日志
- 解决通过QQ客户端的空间邮箱等打开空间邮箱
- python模块初始与time、datetime及random
- 落纱机器人_「聚焦」青岛艾菲特智能落纱机器人—智能制造,为您省工
- 用户画像:数据指标与表结构设计
- 用汇编的眼光看C++(之判断流程)
- 神马是代码简单的cmd模式,这就是!
- 公网用户接入NAT后面的freeswitch配置
- 安卓怎么调用系统的ui_安卓逆向 | 为了反射调用我们怎么能拿到被HOOK函数的实例...
- springboot 没有找到service_Spring Boot 应用程序五种部署方式
- SpringCloud工作笔记070---SpringCloud中使用Redis存储List类型数据
- 在微信中调用ajax出现的问题
- WIN10的WIFI不能自动链接?
- Mediator(中介者)
- 智慧农业项目建设体系之精准饲喂系统及数据分析
- 电磁兼容学习-电磁干扰三要素
- everedit 格式化json_Visual studio code (VS code)
- sdnu oj 1357.Text Reverse 字符串
- GMTC2019会后:做一场冷门的技术专场是什么体验
- canvas 文字颜色_Canvas 超全教程