今天继续排序之路,今天要贴出的是插入排序,也属于简单的排序,对于数量小的排序,它还是一个很有效的算法,
以下属于本人 粗暴讲解
原理:
它的工作方式很像人们打牌插牌一样,从起得第一张牌开始,然后接下来的到的牌如果比手里的牌大就放后面,如果比前面的牌小就放在前面,一样大的就和当前的牌搁一起就可以了,起完所有的牌,按照这样的方法就能把手里的牌排好序了。所以会从待排序的第二个元素开始,然后和前面的数进行比较。依次下去,直到最后一个元素。
时间复杂度:
和前面的冒泡排序有的一拼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,对一天的总结,也对自己的一个交 代,睡觉,晚上吃多了会长胖!
相关推荐
4. **排序算法**:如选择排序、插入排序、冒泡排序、Shell排序、Shaker排序、堆排序、快速排序和合并排序。这些都是常见的排序算法,各有优缺点,适用于不同的数据场景。 5. **搜寻算法**:包括循序搜寻、二分搜寻...
在sort.cpp中,可能包含了各种排序算法的实现,如冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序等。这些排序算法各有优缺点,适用于不同的场景,理解它们的工作原理和性能特点对于优化程序至关重要。 ...
15. 各种排序算法:包括选择排序、插入排序、冒泡排序、希尔排序、谢尔排序、快速排序、归并排序、基数排序等,它们各有优缺点,适用于不同场景和数据特性。 16. 搜索算法:如顺序搜索、二分搜索、插补搜索、...
这些是最基本的排序算法,分别基于选择法、插入法和交换法来实现。 ### 32. Shell排序法 - 改良的插入排序 (Shell Sort) Shell排序是一种改进版的插入排序,通过引入间隔序列来减少比较次数,提高排序效率。 ### ...
- 深度优先搜索(DFS):沿某一条路径尽可能深地搜索,直到无法再走,然后回溯,常用于拓扑排序和判断连通性。 4. 动态规划: - 背包问题:根据物品价值和重量,决定如何填充背包以最大化价值。 - 最长公共子序列...
- **排序算法**: 包括选择排序、插入排序、气泡排序、Shell排序、Shaker排序等,这些是基础的排序算法。 - **搜索算法**: 如循序搜寻、二分搜寻、插补搜寻、费氏搜寻等,这些算法用于在一维数据结构中查找特定值的...
- **插入排序**:将未排序元素逐个插入到已排序部分的正确位置。 - **快速排序**:使用分治策略,选取一个基准值,将数组分为两部分,一部分所有元素小于基准,另一部分所有元素大于基准,然后对两部分递归进行...
“Shell Sort”是希尔排序,一种基于插入排序改进的排序算法,通过将原始数据分割成若干子序列进行插入排序,可以达到比普通插入排序更快的排序速度。 综上所述,“经典算法大全”通过介绍和实现这些算法,旨在帮助...
- **冒泡排序**:这是一种简单的排序算法,通过重复遍历数组,比较相邻元素并交换位置来逐步将较大的元素“冒”到数组的一端。 - **选择排序**:每次从未排序的部分中选取最小(或最大)的元素,放到已排序部分的...
二分搜索法广泛应用于排序后的数据处理,如查找、插入和删除操作。 以上这些算法在实际的编程项目中有着广泛的应用,通过深入理解和掌握这些知识点,可以显著提升编程技能和问题解决能力。《C++算法大全》提供的...
- **冒泡排序**:是最简单的交换排序,通过不断比较相邻元素并交换来实现排序,适用于小规模或部分有序的数据。 - **选择排序**:每次选择当前未排序部分的最小(或最大)元素放到已排序部分的末尾,适合数据量小...
选择排序、插入排序和气泡排序是三种基本的排序算法,适用于小数据量排序。 #### 33. Shell排序法 Shell排序是对插入排序的改进,通过设置间隔来减少比较和交换的次数。 #### 34. Shaker排序法 Shaker排序是气泡...
标题《C语言实现一些经典算法,可以免费下载》和描述《参加比赛后第一次知道算法这么重要,在网上找过很多算法的资料,这个资料对我最有帮助》表明了本资料是关于使用C语言实现各类经典算法,并且可以免费获取的电子...
- **定义**: 这些是基础排序算法,分别介绍了选择排序、插入排序和气泡排序的具体实现。 - **应用场景**: 算法教学、数据排序等。 ### 33. Shell排序法-改良的插入排序 #### 说明 - **定义**: Shell排序是对插入...
每一类算法可能会有多重实现方式,例如冒泡排序、快速排序、归并排序等不同的排序算法实现,旨在帮助开发者理解和掌握算法设计的核心思想及其效率差异。 编程练习环节则是将理论应用于实践的重要步骤。在这一部分,...
常见的树有二叉树、平衡二叉树(如AVL树和红黑树)、B树、B+树等,它们在搜索、排序等方面有广泛应用。 6. **图**:由顶点和边构成,可以表示复杂的网络关系,如社交网络、网页链接等。图的算法包括深度优先搜索...
**说明**:Shell排序法是一种改进的插入排序算法,通过设置不同的增量进行排序。 - **应用场景**:Shell排序法适用于中等规模的数据排序。 - **原理**:Shell排序法通过设置不同的增量对数组进行多次插入排序,最终...
此外,考生应能熟练运用查找与排序算法,如哈希查找及其冲突解决方法,以及各种排序算法,包括但不限于插入排序、选择排序、快速排序、堆排序、归并排序和基数排序。 深入到算法内部,考生还需能够分析算法的时间...
排序算法是计算机科学中最基本的算法之一,常用的排序算法包括冒泡排序、选择排序、插入排序、快速排序等。 ##### BFS (广度优先搜索) BFS 是一种图遍历算法,它按照节点的层次顺序访问每个节点。通常用于寻找最短...