插入排序

【计算机笔记】Java 排序

喜欢而已 提交于 2019-12-17 02:09:30
约定 待排序的元素需要实现 Java 的 Comparable 接口,该接口有 compareTo() 方法,可以用它来判断两个元素的大小关系。 使用辅助函数 less() 和 swap() 来进行比较和交换的操作,使得代码的可读性和可移植性更好。 排序算法的成本模型是比较和交换的次数。 public abstract class Sort < T extends Comparable < T > > { public abstract void sort ( T [ ] nums ) ; protected boolean less ( T v , T w ) { return v . compareTo ( w ) < 0 ; } protected void swap ( T [ ] a , int i , int j ) { T t = a [ i ] ; a [ i ] = a [ j ] ; a [ j ] = t ; } } 选择排序 从数组中选择最小元素,将它与数组的第一个元素交换位置。再从数组剩下的元素中选择出最小的元素,将它与数组的第二个元素交换位置。不断进行这样的操作,直到将整个数组排序。 选择排序需要 ~N 2 /2 次比较和 ~N 次交换,它的运行时间与输入无关,这个特点使得它对一个已经排序的数组也需要这么多的比较和交换操作。 public class

排序算法之希尔排序

ぐ巨炮叔叔 提交于 2019-12-16 04:24:30
希尔排序 /希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。 //希尔排序是基于插入排序的以下两点性质而提出改进方法的: 1.插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率。 2.但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位。 function shellsSort ( arr : number [ ] ) { let len = arr . length ; for ( let gap = Math . floor ( len / 2 ) ; gap > 0 ; gap = Math . floor ( gap / 2 ) ) { //希尔排序中外层步长 for ( let i = gap ; i < len ; i ++ ) { //开始插入排序 for ( let j = i - gap ; j > 0 && arr [ j ] > arr [ gap + j ] ; j -= gap ) { //满足条件则插入 let temp = arr [ j ] ; arr [ j ] = arr [ gap + j ] ; arr [ gap + j ] = temp ; } } } }

基础算法:插入排序和希尔排序

。_饼干妹妹 提交于 2019-12-16 03:30:25
插入排序【Python】 简要描述:插入排序过程类似于打扑克时的 理牌 过程。 过程简单描述: 1:循环,从数组第2个元素开始遍历 1.1:循环,找到插入位置(把它与它位置左边的元素做比较) 1.2:循环,腾出插入位置(保存当前需要插入的元素后,使原本插入位置至当前插入元素位置的前一个元素都往后移动一位) 1.3:插入元素至插入位置 def insert_sort ( lst ) : # 循环第r次后,前r+1个元素都是有序的。 for i in range ( 1 , len ( lst ) ) : insert_ele = lst [ i ] insert_index = i # 1.找到插入的位置 for j in range ( i - 1 , - 1 , - 1 ) : if lst [ i ] < lst [ j ] : insert_index = j else : break # 2.腾出位置给要插入的元素 for move in range ( i - 1 , insert_index - 1 , - 1 ) : lst [ move + 1 ] = lst [ move ] # 3.插入元素 lst [ insert_index ] = insert_ele return lst print ( insert_sort ( [ 0 , 5 , 2 , 1 ] )

排序算法 ---- 插入排序

荒凉一梦 提交于 2019-12-15 22:24:40
插入排序 插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 def insert_sort ( alist ) : "插入排序" n = len ( alist ) for j in range ( 1 , n ) : i = j while i > 0 : if alist [ i ] < alist [ i - 1 ] : alist [ i ] , alist [ i - 1 ] = alist [ i - 1 ] , alist [ i ] i -= 1 else : break if __name__ == '__main__' : alist = [ 54 , 26 , 93 , 17 , 77 , 17 , 44 , 55 , 20 ] insert_sort ( alist ) print ( alist ) # 时间复杂度 # 最优时间复杂度:O(n) (升序排列,序列已经处于升序状态) # 最坏时间复杂度:O(n2) # 稳定性:稳定 来源: CSDN 作者: 愤进的蜗牛 链接: https://blog.csdn.net/weixin

一维数组 简化的插入排序

懵懂的女人 提交于 2019-12-15 20:29:07
一维数组 简化的插入排序 1.题目详解 本题要求编写程序,将一个给定的整数插到原本有序的整数序列中,使结果序列仍然有序。 输入格式: 输入在第一行先给出非负整数N( <10);第二行给出N个从小到大排好顺序的整数;第三行给出一个整数X。 输出格式: 在一行内输出将X插入后仍然从小到大有序的整数序列,每个数字后面有一个空格。 2.流程图 3.核心代码 if (x <= a[1]) { printf("%d ", x); c++; } for (i = 1; i <= n; i++) { printf("%d ", a[i]); if (a[i] <=x && x < a[i + 1] && i != n) { printf("%d ", x); c++; } } if (c == 0) { printf("%d ", x); } 无问题 来源: https://www.cnblogs.com/happybrother/p/12045567.html

排序算法:插入排序、希尔排序、冒泡、快速排序、选择排序、堆排序以及归并和基数排序

风流意气都作罢 提交于 2019-12-13 18:31:47
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 由于博客迁移至 www.coderyi.com ,文章请看 http://www.coderyi.com/archives/412 排序分为内部排序和外部排序,内部排序指待排序的记录在内存中,外部排序的记录数量很大,以至于内存放不下而放在外存中,排序过程需要访问外存。这里仅介绍内部排序,包括插入排序、交换排序、选择排序、归并排序、基数排序。 1 插入排序 1.1直接插入(straight insertion sort) 算法思路:数组{k1,k2,……,kn},排序一开始k1是一个有序序列,让k2插入得到一个表长为2的有序序列,依此类推,最后让kn插入上述表长为n-1的有序序列,得到表长为n的有序序列。 c实现的代码: // 从小到大排序 int a[]={98,97,34,345,33}; int k=sizeof(a)/sizeof(a[0]); int j; for (int i=1; i<k; i++) { int temp=a[i]; for (j=i-1; j>=0&&a[j]>temp; j--) { a[j+1]=a[j]; } a[j+1]=temp; } 1.2折半插入(binary insertion sort) 算法思路:当直接插入进行到某一趟时,对于r[i]来讲,前面i

十大排序算法之插入排序

丶灬走出姿态 提交于 2019-12-13 08:10:25
简介 插入排序:插入即表示将一个新的数据插入到一个有序数组中,并继续保持有序。例如有一个长度为N的无序数组,进行N-1次的插入即能完成排序;第一次,数组第1个数认为是有序的数组,将数组第二个元素插入仅有1个有序的数组中;第二次,数组前两个元素组成有序的数组,将数组第三个元素插入由两个元素构成的有序数组中…第N-1次,数组前N-1个元素组成有序的数组,将数组的第N个元素插入由N-1个元素构成的有序数组中,则完成了整个插入排序。 理解 有五个无序数据为例: 3,1,5,4,2 第一次排序,1比3小,则1和3换位置,变为了1,3,5,4,2 第二次排序,5比3大,不需要调整,仍未1,3,5,4,2 第三次排序,4比5小,则4和5 换位置,此时4比3大,则不再继续调整,此时变为了1,3,4,5,2 第四次排序,2比5小,2和5换位置,2又比4小,2继续和4换位置,2仍然比3小,继续和3换位置,最后2比1大,不再调整。最终,变成了1,2,3,4,5. 数据变成了有序。 实例 Java 代码 public class Main { public static void main ( String [ ] args ) { int [ ] sorts = { 3 , 2 , 1 , 4 , 6 , 5 , 8 , 7 , 10 , 9 } ; System . out . println (

六种常见排序算法(Python语言实现)

半世苍凉 提交于 2019-12-12 23:28:37
文章目录 排序算法总结 常见算法时间复杂度比较 冒泡排序 简介与工作原理: 代码实现 选择排序 插入排序 快速排序 希尔排序 归并排序 排序算法总结 常见算法时间复杂度比较 冒泡排序 简介与工作原理: 简介:是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 从第一个元素开始,与相邻的元素进行比较,如果比较结果是升序的,就把这两个元素进行互换 从第一对到最后一对进行比较,对每一对相邻元素重复进行此操作,做完这个操作后,最后一个元素是最大的元素 针对所以的元素再重复以上步骤 持续对越来越少的元素进行以上的步骤,直到没有任何一对数据需要比较为止。 代码实现 #!/usr/local/bin/python 2 # 冒泡排序 3 def bubb_sort ( list ) : 4 L = len ( list ) 5 for j in range ( L , 0 , - 1 ) : 6 for i in range ( j - 1 ) : 7 if list [ i ] > list [ i + 1 ] : 8 list [ i ] , list [ i + 1 ] = list [ i + 1

双重for循环实现插入排序

杀马特。学长 韩版系。学妹 提交于 2019-12-12 13:48:38
import java . util . Arrays ; public class InsertionSort { public static void main ( String [ ] args ) { int [ ] array = new int [ 6 ] ; for ( int i = 0 ; i < 6 ; i ++ ) { array [ i ] = ( int ) ( Math . random ( ) * 100 ) ; } System . out . println ( "待排序的数据为:" + Arrays . toString ( array ) ) ; System . out . println ( "开始排序*********" ) ; insertionSort ( array ) ; System . out . println ( "排序过后的数据为:" + Arrays . toString ( array ) ) ; } public static void insertionSort ( int [ ] array ) { int len = array . length ; int temp = 0 ; for ( int i = 1 ; i < len ; i ++ ) { temp = array [ i ] ; /

插入排序代码分析

南楼画角 提交于 2019-12-12 00:30:37
直接插入排序 JavaScript 实现代码: 123456789101112131415161718192021222324 function insertionSort(array) { //自定义函数,交换i和j的位置 function swap(array, i, j) { var temp = array[i]; array[i] = array[j]; array[j] = temp; } var length = array.length, i,//从第二项开始,与前一项作比较 j;//为了往前进行比较 for (i = 1; i < length; i++) { for (j = i; j > 0; j--) { //从第j项开始,与前一项比较大小,如果前项大于后项,则交换位置;如果前项小于等于后项,说明当前排序完成,跳出当前循环,i++进行下一项比较,直到最后一项。 if (array[j - 1] > array[j]) { swap(array, j - 1, j); } else { break; } } } return array; } 直接插入排序 JavaScript 实现代码,减少交换次数: 123456789101112131415161718 function insertionSort(array) { var length = array