先推荐一篇关于排序算法的文章:http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html 本文思路部分来源于上篇文章,但测得的结果似乎不大相同,不知是因为java的缘故还是因为我算法的缘故,欢迎拍砖。 复习排序,顺便比下各种算法的速度,榜单如下: 1、冒泡排序 2、简单选择排序 3、直接插入排序 4、折半插入排序 5、希尔排序 6、堆排序 7、归并排序 8、快速排序 当然这是慢速排行,哈哈~~ 直接上图:单位毫秒...
一 插入排序和希尔排序 插入排序和冒泡排序有点像,一个形象的比喻就是打扑克的时候摸牌的时候,也就是手里的牌都是有序的,新插入的找位置,其它元素一次后移package sort;import java.util.Arrays;public class ChaRu {public static void main(String[] args) {int arr[] = {2, 25, -5, 36, 89, -6};chaRu(arr);System.out.println(Arrays.toString(arr));}public static void chaRu(int []arr) {for(int i=1;i<arr.length;i++...
一、插入排序的介绍插入排序的工作方式非常像人们排序一手扑克牌一样。开始时,我们的左手为空并且桌子上的牌面朝下。然后,我们每次从桌子上拿走一张牌并将它插入左手中正确的位置。为了找到一张牌的正确位置,我们从右到左将它与已在手中的每张牌进行比较,如下图所示:那插曲排序是如何借助上面提到的思想来实现排序的呢?首先我们将数组中的数据分为两个区间,已排序区间和未排序区间。初始已排序区间只有一个元素,就是数组的...
代码实现:package com.datastruct.sort;import java.util.Arrays;/*** 插入排序Java实现* @author Administrator**/ public class InsertSort {public static void insertSort(int [] array){for(int i = 1;i<array.length;i++){int currentIndex = i-1;int currentValue = array[i];//开始循环移动while(currentIndex>=0&¤tValue<=array[currentIndex]){array[currentIndex+1] = array[currentIndex];currentIndex--;}array...
https://blog.csdn.net/justloveyou_/article/details/72730597 public class SortHill {@Testpublic void test() {int[] a = {5, 7, 21, 2, 8, 31, 17, 3, 22, 15, 9, 6};for (int gap = a.length / 3 + 1; gap > 0; gap--) {for (int i = gap; i < a.length; i++) {for (int j = i - gap; j >= 0; j -= gap) {if (a[i] < a[j]) {swap(a, i, j);}}print(a, gap);}}}private void swap(int[] a, int i, int j) {int tmp = a[i];a[i...
https://blog.csdn.net/justloveyou_/article/details/72730597 直接插入排序的思想: 当插入第i(i>=1)个元素时,前面的V[0],…,V[i-1]等i-1个 元素已经有序。 这时,将第i个元素与前i-1个元素V[i-1],…,V[0]依次比较,找到插入位置即将V[i]插入,同时原来位置上的元素向后顺移。 在这里,插入位置的查找是顺序查找。直接插入排序是一种稳定的排序算法,其实现如下:public class SortStraightInsert {@Testpublic void test() {...
思路 通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 时间复杂度 最佳情况:T(n) = O(n) 最坏情况:T(n) = O(n2) 平均情况:T(n) = O(n2) 代码 import java.util.Arrays;/*** 插入排序* @author remainsu* @version ...
我试图从Haskell移植这个特定的插入排序.在大多数情况下,如果List长于输入或有时复制的值,我会得到奇怪的错误输出.你看到我失踪的东西吗?或者我可能没有正确地从Haskell复制语法: 如果你提供修复,你可以使用类似的语义,我试图理解这个特定的版本.object InsertionSortApp {/* * Based on Haskell version:insert e [] = [e]insert e lst@(x:xs)| e < x = e : lst| otherwise = x : (insert e xs)insertionSort lst = inserti...
1、基本思想 将数组中的所有元素依次跟前面已经排好的元素相比较,如果选择的元素比已排序的元素小则依次交换,直到出现比选择元素小的元素或者全部元素都比较过为止。 2、算法描述 ①. 从第一个元素开始,该元素可以认为已经被排序; ②. 取出下一个元素,在已经排序的元素序列中从后向前扫描; ③. 如果该元素(已排序)大于新元素,将该元素移到下一位置; ④. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置; ⑤. ...
原文:十大经典排序算法(动图演示) 插入排序插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 算法描述: 一般来说,插入排序都采用 in-place 在数组上实现:从第一个元素开始,该元素可以认为已经被排序; 取出下一个元素,在已经排序的元素序列中从后向前扫描; 如果该元素(已排序)大于新元素,将该元素...
def insertionSort(alist): for index in range(1, len(alist)): currentvalue = alist[index] position = indexwhile position > 0 and alist[position-1] > currentvalue:alist[position] = alist[position-1]position -= 1alist[position] = currentvalue
插入排序在局部有序的情况下比冒泡排序快一倍,比选择排序快一点。 那什么是插入排序,就是将局部有序的数据向右移动,将未排序的数据插到他的前面 下面我们来解析代码: 这里外层循环out变量从1开始向右移动,他标记了未排序的最左端的数据。在内层的white循环中,in变量从out变量开始,向左移动,直到in变量不能再向左移动并且temp小于in所指的数据项的时候停止移动,while循环的每一趟都向右移动了一个已排序的数据项static in...
插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。...
1、算法介绍 (1)待排序序列的第一个元素当做已排序序列,第二个元素至最后一个元素当做未排序序列 (2)遍历未排序序列,将元素与已排序序列比较,插入到已排序序列中 (3)若未排序的元素与已排序序列中某元素相等,则将未排序的该元素插入已排序相等元素后面 2、代码实现 2.1、golangpackage mainimport ("fmt" )func main() {slice := []int{5, 3, 12, 54, 23, 12, 6, 9, 19}SortInsert(slice)fmt.Println(slice) }//直接插入...
在Robert Lafore的“Java中的数据结构和算法”一书中,声明插入排序是一种稳定的算法.这意味着相同的物品保留了他们的订单. 以下是本书中的示例:public void insertionSort() {int in, out;for (out = 1; out < nElems; out++) // out is dividing line{long temp = a[out]; // remove marked itemin = out; // start shifts at outwhile (in > 0 && a[in - 1] >= temp) // until one is smaller,{a[in] = a[in - 1]; // shift ite...