`

重走算法路之简单排序(插入)

阅读更多

         今天继续排序之路,今天要贴出的是插入排序,也属于简单的排序,对于数量小的排序,它还是一个很有效的算法,

     

      以下属于本人 粗暴讲解

     

       原理

       它的工作方式很像人们打牌插牌一样,从起得第一张牌开始,然后接下来的到的牌如果比手里的牌大就放后面,如果比前面的牌小就放在前面,一样大的就和当前的牌搁一起就可以了,起完所有的牌,按照这样的方法就能把手里的牌排好序了所以会从待排序的第二个元素开始,然后和前面的数进行比较。依次下去,直到最后一个元素。

     

        时间复杂度:

        和前面的冒泡排序有的一拼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,对一天的总结,也对自己的一个交  代,睡觉,晚上吃多了会长胖!

       

       

 

  • 大小: 46.2 KB
1
1
分享到:
评论

相关推荐

    详细的常用算法及其代码,ACM比赛算法

    4. **排序算法**:如选择排序、插入排序、冒泡排序、Shell排序、Shaker排序、堆排序、快速排序和合并排序。这些都是常见的排序算法,各有优缺点,适用于不同的数据场景。 5. **搜寻算法**:包括循序搜寻、二分搜寻...

    算法导论源码

    在sort.cpp中,可能包含了各种排序算法的实现,如冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序等。这些排序算法各有优缺点,适用于不同的场景,理解它们的工作原理和性能特点对于优化程序至关重要。 ...

    C语言 经典算法 算法大全

    15. 各种排序算法:包括选择排序、插入排序、冒泡排序、希尔排序、谢尔排序、快速排序、归并排序、基数排序等,它们各有优缺点,适用于不同场景和数据特性。 16. 搜索算法:如顺序搜索、二分搜索、插补搜索、...

    经典算法大全 算法很不错啊

    这些是最基本的排序算法,分别基于选择法、插入法和交换法来实现。 ### 32. Shell排序法 - 改良的插入排序 (Shell Sort) Shell排序是一种改进版的插入排序,通过引入间隔序列来减少比较次数,提高排序效率。 ### ...

    常用算法程序集(C语言描述)

    - 深度优先搜索(DFS):沿某一条路径尽可能深地搜索,直到无法再走,然后回溯,常用于拓扑排序和判断连通性。 4. 动态规划: - 背包问题:根据物品价值和重量,决定如何填充背包以最大化价值。 - 最长公共子序列...

    经典算法50例

    - **排序算法**: 包括选择排序、插入排序、气泡排序、Shell排序、Shaker排序等,这些是基础的排序算法。 - **搜索算法**: 如循序搜寻、二分搜寻、插补搜寻、费氏搜寻等,这些算法用于在一维数据结构中查找特定值的...

    Java常见100多种算法大全

    - **插入排序**:将未排序元素逐个插入到已排序部分的正确位置。 - **快速排序**:使用分治策略,选取一个基准值,将数组分为两部分,一部分所有元素小于基准,另一部分所有元素大于基准,然后对两部分递归进行...

    经典算法大全

    “Shell Sort”是希尔排序,一种基于插入排序改进的排序算法,通过将原始数据分割成若干子序列进行插入排序,可以达到比普通插入排序更快的排序速度。 综上所述,“经典算法大全”通过介绍和实现这些算法,旨在帮助...

    C程序设计-c常用算法程序集

    - **冒泡排序**:这是一种简单的排序算法,通过重复遍历数组,比较相邻元素并交换位置来逐步将较大的元素“冒”到数组的一端。 - **选择排序**:每次从未排序的部分中选取最小(或最大)的元素,放到已排序部分的...

    c++算法大全.rar

    二分搜索法广泛应用于排序后的数据处理,如查找、插入和删除操作。 以上这些算法在实际的编程项目中有着广泛的应用,通过深入理解和掌握这些知识点,可以显著提升编程技能和问题解决能力。《C++算法大全》提供的...

    C常用算法程序集.rar

    - **冒泡排序**:是最简单的交换排序,通过不断比较相邻元素并交换来实现排序,适用于小规模或部分有序的数据。 - **选择排序**:每次选择当前未排序部分的最小(或最大)元素放到已排序部分的末尾,适合数据量小...

    C程序算法大全

    选择排序、插入排序和气泡排序是三种基本的排序算法,适用于小数据量排序。 #### 33. Shell排序法 Shell排序是对插入排序的改进,通过设置间隔来减少比较和交换的次数。 #### 34. Shaker排序法 Shaker排序是气泡...

    C语言实现一些经典算法,可以免费下载

    标题《C语言实现一些经典算法,可以免费下载》和描述《参加比赛后第一次知道算法这么重要,在网上找过很多算法的资料,这个资料对我最有帮助》表明了本资料是关于使用C语言实现各类经典算法,并且可以免费获取的电子...

    算法大全(C语言版本)很经典

    - **定义**: 这些是基础排序算法,分别介绍了选择排序、插入排序和气泡排序的具体实现。 - **应用场景**: 算法教学、数据排序等。 ### 33. Shell排序法-改良的插入排序 #### 说明 - **定义**: Shell排序是对插入...

    代码集和收藏项目目录。包括数据结构,算法,练习等的简单实现以及收藏项目列表。_code-segment.zip

    每一类算法可能会有多重实现方式,例如冒泡排序、快速排序、归并排序等不同的排序算法实现,旨在帮助开发者理解和掌握算法设计的核心思想及其效率差异。 编程练习环节则是将理论应用于实践的重要步骤。在这一部分,...

    数据结构导游代码

    常见的树有二叉树、平衡二叉树(如AVL树和红黑树)、B树、B+树等,它们在搜索、排序等方面有广泛应用。 6. **图**:由顶点和边构成,可以表示复杂的网络关系,如社交网络、网页链接等。图的算法包括深度优先搜索...

    通信计算机网络面试题(c/c++)

    **说明**:Shell排序法是一种改进的插入排序算法,通过设置不同的增量进行排序。 - **应用场景**:Shell排序法适用于中等规模的数据排序。 - **原理**:Shell排序法通过设置不同的增量对数组进行多次插入排序,最终...

    电子科技大学计算机考研820专业课考点 (2).pdf

    此外,考生应能熟练运用查找与排序算法,如哈希查找及其冲突解决方法,以及各种排序算法,包括但不限于插入排序、选择排序、快速排序、堆排序、归并排序和基数排序。 深入到算法内部,考生还需能够分析算法的时间...

    acm-icpc模板

    排序算法是计算机科学中最基本的算法之一,常用的排序算法包括冒泡排序、选择排序、插入排序、快速排序等。 ##### BFS (广度优先搜索) BFS 是一种图遍历算法,它按照节点的层次顺序访问每个节点。通常用于寻找最短...

Global site tag (gtag.js) - Google Analytics