今天继续排序之路,今天要贴出的是插入排序,也属于简单的排序,对于数量小的排序,它还是一个很有效的算法,
以下属于本人 粗暴讲解
原理:
它的工作方式很像人们打牌插牌一样,从起得第一张牌开始,然后接下来的到的牌如果比手里的牌大就放后面,如果比前面的牌小就放在前面,一样大的就和当前的牌搁一起就可以了,起完所有的牌,按照这样的方法就能把手里的牌排好序了。所以会从待排序的第二个元素开始,然后和前面的数进行比较。依次下去,直到最后一个元素。
时间复杂度:
和前面的冒泡排序有的一拼http://mntms.iteye.com/admin/blogs/2044246也是O(n2);所以当要处理的数据量很大的时候效率还是有那么低,当然,当处理少量数据的时候,它和冒泡排序一样是值得选择的,因为比较简单嘛,而且也容易理解。
图文理解:
代码:
package 插入排序; /** * 插入排序 * @author TMs * */ public class InsertionSort { private long[] array; private int count; public static void main(String[] args) { InsertionSort is = new InsertionSort(10); is.insert(34); is.insert(4); is.insert(3); is.insert(234); is.insert(334); is.insert(24); is.insert(0); is.insert(3224); is.insert(134); is.insert(0); is.getSize(); System.out.println("排序前:"); is.display(); is.insertionSort(); System.out.println("排序后:"); is.display(); } /** * 构造一个大小为max的数组大小 * @param max 数组的元素个数的最大值 */ public InsertionSort(int max) { array = new long[max]; count = 0; } /** * 向数组中插入一个值 * @param value 插入的值 */ public void insert(long value) { array[count] = value; count++; } /** * 打印 当前数组中的个数 */ public void getSize() { System.out.println("数组中当前元素的总数为:"+count); } /** * 打印数组中的元素 */ public void display() { for(int i = 0; i < count; i++) { System.out.println("array["+i+"]="+array[i]+" "); } System.out.println(); } /** * 对数组进行插入排序 */ public void insertionSort() { for(int i=count-1; i > 0; i--) { for(int j = count-i; j>0; j--) { if(array[j]<array[j-1]) { exchange(j,j-1); } } } } /** * 交换元素 * @param x 下标x * @param y 下标y */ public void exchange(int x,int y) { long temp; temp = array[x]; array[x] = array[y]; array[y] = temp; } }
输入输出结果:
数组中当前元素的总数为:10 排序前: array[0]=34 array[1]=4 array[2]=3 array[3]=234 array[4]=334 array[5]=24 array[6]=0 array[7]=3224 array[8]=134 array[9]=0 排序后: array[0]=0 array[1]=0 array[2]=3 array[3]=4 array[4]=24 array[5]=34 array[6]=134 array[7]=234 array[8]=334 array[9]=3224
PS:第二个简单的排序,希望自己能坚持每天能搞懂一个东西,然后贴出来(这可能是 最好的了)学 校的课也多,大二狗也只能每天在这个时候安安静静的写写blog,对一天的总结,也对自己的一个交 代,睡觉,晚上吃多了会长胖!
相关推荐
实现以下常用的内部排序算法并进行性能比较:"直接插入排序"," 折半插入排序"," 2—路插入排序"," 表插入排序"," 希尔排序"," 起泡排序"," 快速排序"," 简单选择排序"," 树形选择排序"," 堆排序"," 归并排序"," 链式...
选择排序算法、冒泡排序算法和插入排序算法的时间复杂度为O(n2),写法简单,逻辑易懂,但算力性价比不高,不适用于数据量较大时使用。 合并排序算法和快速排序算法采用了采用分治法、递归的方法,将时间复杂度降为...
算法之插入排序
关于c#的一些算法 选择排序 冒泡排序 快速排序 插入排序 希尔排序 归并排序 基数排序 计数排序。。。
采用c++描述了各种排序算法,包括选择排序 冒泡排序 插入排序 基数排序 快速排序 归并排序 。实验内容 1、创建排序类。 2、提供操作:选择排序、冒泡排序、插入排序、*基数排序、*快速排序、*归并排序。 3、*能够...
7大排序算法(快速排序,冒泡排序,选择排序,归并排序,插入排序,希尔排序,堆排序)实现源码
VC++简单插入排序 一种简单容易实现的排序算法
各种常用c++排序算法,包括插入排序、冒泡排序、选择排序、快速排序、归并排序、希尔排序等
希尔排序,直接插入排序,折半插入排序算法的实现,c语言实现希尔排序
六种内部排序算法比较:直接插入排序、希尔排序、冒泡排序、快速排序、选择排序、堆排序。包含实验报告和源代码设计。
全面的排序算法实现,包括插入排序、合并排序、堆排序、快速排序。 堆排序:HeapSort 讲解详见http://blog.csdn.net/fly_yr/article/details/8550701 插入排序:InSertion_Sort 讲解详见...
插入类排序算法 包括直接插入排序,希尔排序,折半插入排序
用C++语言实现的几个常见算法,里面有注解,方便大家理解,简单易学,都可以正常编译运行。
冒泡排序算法选择排序算法插入排序c语言实现
java编写的插入排序算法
C# 常用经典算法,选择排序 冒泡排序 快速排序 插入排序 希尔排序
算法(冒泡,选择,插入,数组排序) package Teacher; import java.io.*; import java.util.Scanner; public class Tset { public static void main(String args[]) throws IOException { // 需要排序的数组,...
任务:用程序实现插入法排序、起泡法改进算法排序; 利用插入排序和冒泡法的改进算法,将用户随机输入的一列数按递增的顺序排好。 输入的数据形式为任何一个正整数,大小不限。 输出的形式:数字大小逐个递增的数列。
(1) 完成5种常用内部排序算法的演示,5种排序算法为:快速排序,直接插入排序,选择排序,堆排序,希尔排序; (2) 待排序元素为整数,排序序列存储在数据文件中,要求排序元素不少于30个; (3) 演示程序开始,...
C_算法源码(冒泡排序+基数排序+插入排序+快速排序+归并排序 C_算法源码(冒泡排序+基数排序+插入排序+快速排序+归并排序 C_算法源码(冒泡排序+基数排序+插入排序+快速排序+归并排序 C_算法源码(冒泡排序+基数排序+...