参考博客:基于python的七种经典排序算法   [经典排序算法][集锦]     经典排序算法及python实现 首先明确,算法的实质 是 列表排序.具体就是操作的列表,将无序列表变成有序列表! 一.排序的基本概念和分类 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法. 排序的稳定性: 经过某种排序后,如果两个记录序号同等,且两者在原无序记录中的先后秩序依然保持不变,则称所使用的排序方法是稳定的,反之是不稳定…
文字描述 和直接插入排序比较,只是把“查找”操作利用“折半查找”来实现,由此进行的插入排序叫做折半插入排序. 示意图 略 算法分析 和直接插入排序比,减少了比较次数,但是移动次数没有变,所以折半插入排序算法的时间复杂度仍然是n*n, 辅助空间为1,是稳定的排序方法. 代码实现 #include <stdio.h> #include <stdlib.h> #define EQ(a, b) ((a) == (b)) #define LT(a, b) ((a) < (b)) #de…
冒泡排序 时间复杂度:O(n2)  算法稳定 第一趟,从第一个数开始,相邻两个数比较,大的数交换放后,交换到最后位置得出一个第一大数 第二趟,从第一个数开始,相邻两个数比较,大的数交换放后,交换到倒数第二得出一个第二大数 第n-1趟,最后的两个数比较得出最小数和倒数第二小数 代码实现点:时时比较,时时交换 def bubble_sort(li): for i in range(len(li)-1): #第i趟 exchange = False for j in range(len(li)-i-1…
本节内容: 算法基本知识 冒泡排序 选择排序 插入排序 1. 算法基本知识 1.1 什么是算法? 算法(algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出.简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果. 一个算法的优劣可以用空间复杂度与时间复杂度来衡量. 一个算法应该具有以下七个重要的特征: ①有穷性(Finiteness):算法的有穷性是指算法必须能在执行有限个步骤之后终止: ②确切性(Definiteness):算法的每一步…
关于冒泡排序,选择排序,插入排序,希尔排序[资料收集]  以下资料来源与网络 冒泡排序:从后到前(或者从前到后)相邻的两个两两进行比较,不满足要求就位置进行交换,一轮下来选择出一个最小(或最大)的放到了第一个位置上(或最后位置),之后不考虑选出的元素,对剩余的元素进行循环的排列. 举一个例子:我们在火车站买票有军人.记者.两会代表优先的原则,大家排队买票,这时来了一个两会代表买票,他从后往前问买票的人是否是军人.记者.两会代表,如果不是就和普通老百姓交换位置 /// <summary> ///…
1. 快速排序 不稳定的排序. 平均(与最好情况)时间复杂度:O(nlgn)   |  最坏情况时间复杂度(元素有序,递归栈为 O(n)):O(n2) 适合的数据结构:数组,双向链表. #include <stdio.h> #include <stdlib.h> int partition(int data[], int low, int high) { int value = data[low]; // can be done randomly while(low < hi…
文字描述 和之前的插入排序比,表插入排序可以保证排序过程中不移动记录:因此表插入排序所用的存储结构和之前的顺序存储不同,表插入排序采用静态链表类型作为待排记录序列的存储结构,设数组中下标0的分量为表头结点,并令表头结点记录的关键字取最大整数MAXINT.表插入排序的基本操作仍然是将一个记录插入到已经排好序的有序表中,和直接插入排序有相似之处,不同之处在于是以修改2次指针值代替1次移动记录. 示意图 算法分析 时间复杂度仍然是n*n, 因为排序过程中需要和数据个数相同的指针值,所以辅助空间为n,是…
文字描述 在折半插入排序的基础上进行改进, 另设一个和待排序序列L相同的数组D, 首先将L[1]赋值给D[0], 数组D中数据是已经排好序的, first指向最小值下标,final指向最大值下标.初始时,first和final值都为0.之后将L的第二个元素开始依次和D[0]比较,大于D[0]的插入到D[0]之后的序列,小于D[0]的插入到D[0]之前的序列:这里可以将数组D想象成一个循环的圆. 示意图 算法分析 时间复杂度为n*n, 辅助空间为n,是稳定的排序方法. 二路插入排序和折半插入排序比…
文字描述: 将一个记录插入到已排好序的有序表中,从而得到一个新的.记录数增1的有序表 示意图: 算法分析: 时间复杂度为n*n,辅助存储为1,是稳定的排序方法. 代码实现: #include <stdio.h> #include <stdlib.h> #define EQ(a, b) ((a) == (b)) #define LT(a, b) ((a) < (b)) #define LQ(a, b) ((a) <= (b)) #define MAXSIZE 20 typ…
希尔排序是插入排序的升级版,先来了解插入排序 插入排序 算法思想: 插入排序再面对几乎已经有序的数据效率非常高,可以达到线性排序的效率 将数组元素插入已经有序的部分中,具体的过程是在有序的部分中通过比较找到新插入元素应该插入的位置,然后从有序部分的队尾元素开始,统统向后移动一位(这一位原本是刚刚那个元素的位置)直到应改插入的那个地方给腾出来,将元素放进去,重复上述过程,直到所有元素有序 def insertion_sort4(collection): length=len(collection)…