菜鸟学习历程【15-1】直接插入排序
来源:互联网 发布:最经典的算法书籍 编辑:程序博客网 时间:2024/06/01 15:00
排序就是按照递增或者递减的次序整理文件中的记录。
排序分为稳定排序和不稳定排序,什么是稳定,什么又是不稳定?
例如:3 15 8 8 6 9
在上述6个数字中的排序过程中,如果将两个8的位置交换过,那么就称为不稳定排序,否则就是稳定排序。
换言之,在某个序列的排序过程中,如果对数值相等的数据进行过交换,那么这种排序就被称为不稳定排序,否则就是稳定排序。
排序算法的性能分析:
算法复杂度:算法复杂度分为时间和空间上;
时间复杂度:指程序循环执行总的次数,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。
空间复杂度:运行该算法占用多少空间资源。
辅助空间:指除了存放待排序资源之外,执行算法所需要的其他存储空间。
排序大致可以分为以下八种:
1.直接插入排序;
2.希尔排序;
3.快速排序;
4.冒泡排序;
5.简单选择排序;
6.堆排序;
7.归并排序;
8. 基数排序。
8种排序的稳定性及复杂度,将在最后一个排序内容里一起介绍。
下面,我们对上述8种排序一一进行讲解说明:
1.直接插入排序
分析:直接插入排序,是先假定序列第一个数按顺序排列,从第2个数开始,与之前的所有数一一进行比较,如果前面的数小于自身,那么就交换位置。通过下面的图示结合讲解,我想大家对于直接插入排序会有一定的认识。
第一次遍历,将第2个数与第一个数进行比较,发现小于第一个数,于是交换位置
第二次遍历,将第三个数与第二个数相比较,发现不小于它,于是不再继续往前遍历,结束本轮遍历
第三次,将第四个数依次与前面的数相比较,发现比它大的,就将大数放在其后一个位置上,继续向前遍历,往后挪位置的过程,其实就是为tmp空出位置
按照这样的方式,直到遍历到最后个元素,直接插入排序就完成了。
下面附上代码:
#include <stdio.h>void InsertSort(int arr[], int len){ int i, j, tmp; for(i = 1; i < len; i++) { tmp = arr[i]; for(j = i - 1; j >= 0; j--) { if(arr[j] > tmp) //如果a[j]>tmp,就将j对应的内容向后挪一位,再次执行,直到前面没有在比tmp大的 { arr[j+1] = arr[j]; } else { break; } } arr[j+1] = tmp; //为什么最后将tmp的值放在对应的位置呢,而不是找到一个比它小的就交换? //每次遍历时,前面的所有数字已经是一个有序序列,如果i前面数j比它大,先将j } //放在i的位置,在继续向前找,又发现比它大的k,再将k放在j原来的位置,直到最后}int main(){ int length; int a[] = {29, 18, 35, 27, 8, 30, 15, 5}; length = sizeof(a) / sizeof(a[0]); InsertSort(a, length); for(i = 0; i < length; i++) { printf("%d ", a[i]); } return 0; }
- 菜鸟学习历程【15-1】直接插入排序
- 菜鸟学习历程【15-2】希尔排序
- 菜鸟学习历程【15-3】快速排序
- 菜鸟学习历程【15-4】冒泡排序
- 菜鸟学习历程【15-6】堆排序、归并排序
- 菜鸟学排序:直接插入排序
- 直接插入排序学习
- 菜鸟学习历程【15-5】简单选择排序
- Java学习-插入排序1-直接插入排序
- 排序 - 插入排序 [1 - 直接插入排序]
- 直接插入排序--学习(三)
- 排序之直接插入排序学习笔记
- 排序算法学习-直接插入排序
- 学习笔记-直接插入排序 15/01/05
- 7.2.1 直接插入排序
- 1、直接插入排序InserTSort()
- 插入排序--直接插入
- 插入排序------直接插入
- 代理模式的学习
- HDU 1280 前m大的数(暴力)
- ctf密码学——传统知识+古典密码
- unity和安卓通信_调用相册_AndroidStudio
- 欢迎使用CSDN-markdown编辑器
- 菜鸟学习历程【15-1】直接插入排序
- 【现代密码学】用MATLAB实现RC4算法
- View 的一些方法 《未完》
- VTK读取DICOM医学图片进行体绘制的几种方法
- Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException
- 过滤器和拦截器的本质区别
- jquery ul li 操作
- SpringBoot 统一异常处理--- @ControllerAdvice 使用
- 使用PHPStorm+Composer快速初始化项目