直接插入排序
二分插入排序
希尔排序
插入排序原理:
将一组数据分成两组,分别为有序组与待插入组。
每次从待插入组中取出一个元素,与有序组的元素进行比较,并找到合适的位置,将该元素插到有序组当中。就这样,每次插入一个元素,有序组增加,待插入组减少。直到待插入组元素个数为0。当然,插入过程中涉及到了元素的移动。
插入排序算法有种递归的思想在里面,它由N-1趟排序组成。初始时,只考虑数组下标0处的元素,只有一个元素,显然是有序的。
然后第一趟 对下标 1 处的元素进行排序,保证数组[0,1]上的元素有序;
第二趟 对下标 2 处的元素进行排序,保证数组[0,2]上的元素有序;
.....
.....
第N-1趟对下标 N-1 处的元素进行排序,保证数组[0,N-1]上的元素有序,也就是整个数组有序了。
它的递归思想就体现在:当对位置 i 处的元素进行排序时,[0,i-1]上的元素一定是已经有序的了。
void InsertionSort(int *num,int n) { int i = 0; int j = 0; int tmp = 0; for(i = 1;i<n;i++) { tmp = num[i];//从待插入组取出第一个元素。 j = i-1; //i-1即为有序组最后一个元素(与待插入元素相邻)的下标 while(j>=0&&tmp<num[j]) //注意判断条件为两个,j>=0对其进行边界限制。第二个为插入判断条件 { num[j+1] = num[j];//若不是合适位置,有序组元素向后移动 j--; } num[j+1] = tmp;//找到合适位置,将元素插入。 } } int main() { int i = 0; int num[8]={9,3,4,2,6,7,5,1}; InsertionSort(num,8); /*这个函数必须知道元素的个数,所以将元素个数传入。 有心者可以在函数内部用sizeof求出元素个数 */ for(i=0;i<8;i++) { printf("%d ",num[i]); } return 0; }
package com.test; public class InsertSort { public static void printArray(int[] a){ for(int item : a){ System.out.print(item + " "); } } public static void main(String[] args) { int[] arr={5,3,2,45,65,33,12}; sort(arr); printArray(arr); } public static void sort(int[] arr){ //以第一个为已排序队列,后面所有数字为待排序队列 for(int i=1;i<arr.length;i++){ //从待插入组取出第一个元素 int tmp = arr[i]; int j = 0; for(j = i-1;j>=0;j--){ //若待插入数字小于已排序队列最后一个数字,则将已排序队列最后一个数字往后移一位 if(tmp < arr[j]){ arr[j+1] = arr[j]; }else{ //若待插入数字大于已排序队列最后一个数字,则直接跳出 break; } } arr[j+1] = tmp; } } }
二、希尔排序
。。。
相关推荐
八种排序算法原理及Java实现( 冒泡排序+快速排序直接插入排序+希尔排序+选择排序+归并排序+基数排序)
基础五大排序算法(冒泡+排序+插入+希尔+快速)简述,算法数据结构 五大常用算法
合并排序,插入排序,希尔排序,快速排序,冒泡排序,桶排序的C语言实现,原创。
实现以下常用的内部排序算法并进行性能比较:"直接插入排序"," 折半插入排序"," 2—路插入排序"," 表插入排序"," 希尔排序"," 起泡排序"," 快速排序"," 简单选择排序"," 树形选择排序"," 堆排序"," 归并排序"," 链式...
10种排序算法代码+综合比较代码(直接插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序、基数排序、折半插入排序、2路插入排序),其中不仅有各种排序算法的代码,还包含10种代码在关键字...
7大排序算法(快速排序,冒泡排序,选择排序,归并排序,插入排序,希尔排序,堆排序)实现源码
直接插入排序、折半插入排序、希尔排列
随机生成小于5000的数 根据操作通过不同的方法排序 泡泡排序 直接插入排序 折半插入排序 希尔排序 直接选择排序 统计时间 比较次数和交换次数 保存为txt文件
(1) 完成5种常用内部排序算法的演示,5种排序算法为:快速排序,直接插入排序,选择排序,堆排序,希尔排序; (2) 待排序元素为整数,排序序列存储在数据文件中,要求排序元素不少于30个; (3) 演示程序开始,...
冒泡排序、选择排序、插入排序和希尔排序 冒泡排序、选择排序、插入排序和希尔排序 冒泡排序、选择排序、插入排序和希尔排序
c++实现的线性表排序算法 插入排序,希尔排序,冒泡排序,快速排序,堆排序,归并排序等
本文介绍了C#的四种排序算法:冒泡排序、选择排序、插入排序和希尔排序 冒泡排序、选择排序、插入排序和希尔排序
冒泡排序,选择排序,插入排序,希尔排序,堆排序,归并排序,快速排序源码实现,里面有详细讲解,对新手应该有帮助
插入排序之希尔排序
本实验含有四部分内容——直接插入排序、希尔排序、选择排序、快速排序,在上述内容的基础上,将所有排序算法整合在一个程序中。学生可参考教材中的伪代码。鼓励学生自创新思路,新算法。
希尔排序:其实就是用步长控制的插入排序,希尔排序通过加大插入排序中元素之间的间隔,并在这些有间隔的元素中进行插入排序,从而让数据项可以大幅度移动,这样的方式可以使每次移动之后的数据离他们在最终序列中的...
用C++,模板写的 7中排序. 快速排序, 归并排序,插入排序,选择排序,起泡排序,堆排序,希尔排序
排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序.mht
六种内部排序算法比较:直接插入排序、希尔排序、冒泡排序、快速排序、选择排序、堆排序。包含实验报告和源代码设计。
插入排序采用三种方法实现,希尔排序根据插入排序采用的方法不同,也有三种,但是又通过改进得到一种最为简介的实现方式。所有方法的实现在博客中:http://blog.csdn.net/ns_code/article/details/20043459中有详细...