没办法就是这么没原则,又开了个坑。每天看点书,不管什么书。1. 需求: 输入:n个数的一个序列(a1, a2, a3……an) 输出: 输出序列的一个排列(a1‘, a2‘, a3‘ ……an‘),满足a1‘ <= a2‘ <= a3‘ ……<= an‘2. 图示:3. 伪代码 INSERTION-SORT(A)for j=2 to A.lengthkey = A[j]i = j-1//把A[j]插入到有序数组 A[1...j-1].while i > 0 and A[i] > keyA[i+1] = A[i]i = i -1A[i + 1] = key 4. 理解 算法导论不愧是...
///<summary>/// 插入排序///</summary>///<param name="unsorted"></param>staticvoid insertion_sort(int[] unsorted){for (int i = 1; i < unsorted.Length; i++){if (unsorted[i - 1] > unsorted[i]){int temp = unsorted[i];int j = i;while (j > 0 && unsorted[j - 1] > temp){unsorted[j] = unsorted[j - 1];j--;}unsorted[j] = temp;}}} 原文:http://www.cnblogs.com/greyhh/p/4709600.html
/*** 插入排序** <p>算法思路:** <p>1.选取数列第一个数作为已排序,数列的其他部分作为待排部分* <p>2.每次取待排部分的第一个元素待插入数,然后从已排序部分末尾开始遍历,直到找到比待插入数小(或者打)的数* <p>3.将这个小的数的位置后的数往后移动,空出一位,再将待插入数插入* <p>4.重复以上步骤,直到无待排部分** 算法复杂度:O(n2)* 稳定性:稳定* @author lxy*/
public class InsertSort {public static int[] inser...
一、原理: 设有一个长度为N的数组a,下标为0...i...N-1,其中a[0~i]为数组的左半部分,a[i+1~N-1]为数组的右半部分,开始时i=0,要进行递增排序(a[0]<a[1]<....): 1、此时数组的左半部分只有一个元素(a[0]),必为有序,将i+1 2、对数组的左半部分(a[0~1])排序,然后将i+1 3、对数组的左半部分(a[0~2])排序,此时a[0~1]部分已经有序,因此a[2]只要逐步与自己之前的元素比较,直到遇到比自己小的则停止。即:若a[2] ...
/// <summary>/// 步骤:/// 1.记录当前待排元素/// 2.标记顺序表有序查找区域下界和上界/// 3.在顺序表有序查找区域中折半查找等待排序元素的位置/// 4.把顺序表有序查找区域的某些元素后移一位,以空出位置给等待排序的元素/// 5.在空出的位置填写当前排序元素/// </summary>/// <param name="elements"></param>staticvoid SqListSort(int[] elements) {int low; // 有序区域下界int mid; // 有序区域中界int high;// 有序...
基本思路:先以前两个数据为基础,将后面的元素依次取出来插进去。升序就是值从小->大,降序就是值从大->小。代码:void CArrayArithDlg::InsertSort(int nArray[],int nLength){int nInsert=0,nIndex=0;for (int i=1;i<nLength;i++){nInsert=nArray[i]; //每次取数组中的一个值,将此值插进合适出nIndex=i-1;while(nIndex>=0 && nInsert<nArray[nIndex])//升序,如果前面的值大,则将此值后移{nArray[nIndex+1]=nArray[nIndex];nI...
插入排序:从元素的第二个值开始 假设第一个值是排序完成的队列,每次向排序好的队列中插入值得时候都由后往前,直到找到自己应该在得位置publicstaticvoid compare2(int[] arr) {for (int i = 1; i < arr.length; i++) {int current = arr[i];int perIndex = i - 1;while (perIndex >= 0 && current < arr[perIndex]) {arr[perIndex + 1] = arr[perIndex];perIndex--;}arr[perIndex + 1] = current;}for (int i = 0; i < arr.leng...
1 INSERTION - SORT (A)2 for j= 2 to A.length
3 key = A[j]
4 // Insert A[j] into the sorted sequence A[1..j-1]
5 i = j - 16while i>0 and A[i]>key
7 A[i+1]=A[i]
8 i = i - 1
9 A[i+1] = key首先,算法导论书上的类代码如上述.首先要理解的是,算法导论上的类代码并不是从 0 开始 ,而是从 1 开始的, 因此不要奇怪为何 第一行是 从 j = 2开始循环,当然<<算法导论>>上也介绍了 循环不变式 ...
最近在看《算法导论》这本书,在练习题当中发现了这样的一个问题:使用二分查找法来实现插入排序,由于之前的内容当中有讲解二分法的递归实现,所以在这便将它们结合起来希望解决这个问题。闲话不多说了,直接上代码:// Algrithms.cpp : 定义控制台应用程序的入口点。
////使用二分法来完成插入排序,并且使用递归算法来完成二分法
#include "stdafx.h"int Binary_Divide(int A[], int low, int height, int key){//递归终止的条件...
基本思想插入排序(Insertion Sort)基本思想是:依次将待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。具体来说,对于一个有n个数据的序列,排序需要进行n-1趟插入操作。形象来看,每一趟插入操作就像大家玩扑克牌的摸牌阶段,我们使用左手拿着已经摸到并排好大小的牌,右手从牌堆里边摸牌,每摸一张牌就将其插入到左手理顺的牌中,插入后保持其大小顺序。具体来看整个排序过...
讨论内容不说明,仅提供相应的程序。2.1:归并插入排序θ(nlgn)void mergeInsertionSort(int a[], int l, int r, int k)
{int m;if(r-l+1 > k){m = (l + r) / 2;mergeInsertionSort(a, l, m, k);mergeInsertionSort(a, m+1, r, k);merge(a, l, m, r);}elseif(l < r)insertSort(a, l, r);
}void insertSort(int a[], int l, int r)
{int i, j, key;j = l;for(i=l+1; i<=r; i++)if(a[i] < a[j]) j = i;if(j > l){key = a[j];a[j] = a[...
pythondef insertSort(list):for i in range(1,len(list)):j = i-1temp = list[i]while (j>=0) & (temp < list[j]):list[j+1] = list[j]j = j-1list[j+1]=tempreturn listlist = [6,2,7,4,3]
print insertSort(list)
#[2, 3, 4, 6, 7] 原文:https://www.cnblogs.com/Jomini/p/8615902.html
两种方法都编译运行通过,可以当做排序类直接使用。折半插入排序:publicclass Sort1 {publicstaticvoid main(String[] args) {InsertSort sort = new InsertSort();sort.InsertSort();int[] arr = sort.getarr();System.out.println();System.out.println("排序之后:");for (int ar : arr) {System.out.print(ar + " ");}}
}class InsertSort {int[] a = { 49, 38, 65, 97, 76, 13, 27, 49, 78, 34, 12, 64, 1 };int i,high,low,...
a = [5, 4, 3, 2, 1, 0]
len_a = len(a)# 选择排序def selection_sort(a: list):if a is None or len_a < 2:returnfor i in range(len_a):min_index = ifor j in range(i + 1, len_a):if a[j] < a[min_index]:min_index = ja[i], a[min_index] = a[min_index], a[i]print(a)# 冒泡排序def bubble_sort(a: list):if a is None or len_a < 2:returnfor i in range(len_a, 0, -1):for j in range(i):if j == 0:continueif a[j] > a[j ...
插入排序 插入排序的基本思想为逐个考察每个待排序元素,将每一个新元素插入到前面已经排好序的序列中适当的位置上,使得新序列仍然是一个有序序列。插入排序可分为直接插入排序和希尔排序。1.直接插入排序介绍:直接插入排序是一种最简单的排序方法,它的基本操作是将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增加1的有序表。 步骤:从第一个元素开始,该元素可以认为已经被排序取出下一个元素,在已经排序...