package com.tw.ds.sort;
/**
*
* <p>插入排序算法
* 插入排序算法步骤
*1.从有序数列和无序数列{a2,a3,…,an}开始进行排序;
*2.处理第i个元素时(i=2,3,…,n) , 数列{a1,a2,…,ai-1}是已有序的,而数列{ai,ai+1,…,an}是无序的。
*用ai与ai-1,a i-2,…,a1进行比较,找出合适的位置将ai插入;
*3.重复第二步,共进行n-1次插入处理,数列全部有序。
* </p>
* @author tangw 2010-11-26
*
*/
public class InsertSortMain {
/**
* @param args
*/
public static void main(String[] args) {
int []arData = {2,6,5,8,7,9,10,256,248,14};
sortAscending2(arData);
//sortAscending(test1);
for(int i=0; i<arData.length; i++){
System.out.println("---i="+i+"---v="+arData[i]);
}
}
/**
*插入排序方法2
* @param arData
*/
public static void sortAscending2(int[] arData){
int in,out;
int len = arData.length;
for(out=1;out<len;out++){
int temp = arData[out];
in = out;
while(in>0 && arData[in-1]>temp){
arData[in] = arData[in-1];
--in;
}
arData[in] = temp;
}
}
/**
*插入排序方法1
* @param with
* @return
*/
public static int[] sortAscending(int []arData){ //整数递增排序
int length = arData.length; //获取待排数组的元素个数;
int []temp = new int[length];
temp[0] = arData[0]; //定义一个只有一个元素的有序数组
for(int i=1; i<length; i++){
for(int j=i-1; j>=0;j--){
if(arData[i] >= temp[j]){ //如果待排序列中的元素大于等于有有序序列中的元素,则插入
temp[j+1] = arData[i];
break;
}else {
temp[j+1] = temp[j]; //给待插入元素预留空间
if(j == 0)
temp[j] = arData[i]; //arData[[i]是有序序列中最小的,因此排在开头
}
}
}
return temp;
}
}
分享到:
相关推荐
插入排序是一种基础且直观的排序算法,它的工作原理可以类比于整理扑克牌。在实际应用中,插入排序对于小规模数据或者部分有序的数据表现优秀,但对于大规模无序...对于学习和理解排序算法,插入排序是一个很好的起点。
Java代码-排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序中部分排序以及算法-贪心法,大家可以将源码下载下来进行学习,附带着注释和解释,有不理解的可以找博主一起探讨,共同...
直接插入排序是一种简单直观的排序算法,它是通过构建有序序列,对于未排序数据,在已排序...通过阅读"算法-理论基础- 排序- 直接插入排序(包含源程序).pdf"文件,你可以深入了解其细节并实践代码,提升编程能力。
在IT行业中,排序算法是计算机科学的...综上所述,这份资源集合为Swift开发者提供了一个全面的排序算法学习平台,不仅包括理论知识,还有实践代码和交互式展示,对于提升iOS开发者的算法能力和软件质量有着显著的帮助。
在C语言环境下,快速排序.c、insert_sort.c、select_sort.c和maopao_sort.c这四个文件分别对应快速排序、插入排序、选择排序和冒泡排序的源代码实现,读者可以通过阅读和学习这些代码来加深对这些排序算法的理解。
在这一大类排序算法中,有三种常见的实现方式:直接插入排序、希尔排序和折半插入排序。 ### 1. 直接插入排序 直接插入排序是最基础的插入类排序,其步骤如下: 1. 将序列中的第一个元素视为已排序部分。 2. 从第...
本资源包含三个经典的排序算法的源代码:插入排序、选择排序和冒泡排序,这些都是初级到中级程序员常学习和使用的算法。下面将详细介绍这三个排序算法的工作原理、特点以及代码实现。 1. **插入排序(Insertion ...
插入排序是一种简单...总的来说,C语言实现的插入排序是理解排序算法、学习基础编程和优化技巧的一个重要环节。通过实践和优化,我们可以更深入地理解数据结构和算法,这对于任何IT专业人员来说都是必不可少的技能。
本文将深入探讨在易语言中实现分组插入排序的算法,帮助你理解其工作原理并提升编程技能。 分组插入排序是一种改进版的插入排序,它通过将大数组划分为若干个小数组进行排序,从而提高了排序效率。在易语言中,我们...
本主题主要探讨三种经典的排序算法:冒泡排序、选择排序和插入排序。这三种算法虽然简单,但对理解计算机如何处理数据的逻辑至关重要。 **冒泡排序**: 冒泡排序是最基础的排序算法之一,它的名字来源于排序过程中...
总的来说,Java中的直接插入排序算法是一个直观易懂的排序方法,虽然在效率上不敌更高级的排序算法,但它在理解和实现上相对简单,对于初学者来说是很好的学习材料。通过阅读和实践这个源代码,你可以深入理解排序...
算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法...
**插入排序(Insertion Sort)**是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描...学习和理解插入排序有助于深入掌握排序算法的本质和不同排序算法之间的差异。
- **插入排序**:在已排序部分的后方逐个插入新元素,对于部分有序的数据有较好的性能。 - **快速排序**:通过分治策略,平均时间复杂度为O(n log n),是实际应用中最常用的排序算法之一。 - **归并排序**:也是O(n ...
这里我们讨论的是三种经典的排序算法:快速排序、二路归并排序和插入排序,它们都是用Java语言实现的。以下是对这三种排序算法的详细介绍: 1. **插入排序(Insertion Sort)**: 插入排序是一种简单直观的排序...
在编程领域,排序算法是数据结构与算法学习中的重要组成部分,尤其在Java中,掌握各种排序算法对于优化程序性能至关重要。以下将详细讲解标题和描述中提到的五种排序算法:选择排序、插入排序、自顶向上合并排序、...
3. **插入排序**:插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在...
常见的排序算法有冒泡排序、选择排序、插入排序、快速排序、归并排序和堆排序等。这些算法各有优缺点,适用于不同的场景。例如,快速排序通常在平均情况下有很好的性能,而归并排序则保证了稳定的排序效果,但需要...
2. 插入排序:将元素插入到已排序的部分,保持有序状态。每次插入一个新元素,直至所有元素都插入完毕。 3. 选择排序:每一轮找出未排序部分的最小(或最大)元素,放到已排序部分的末尾。 4. 快速排序:采用分治...
- **适应性**:某些算法在特定的数据分布下表现更好,比如快速排序在近乎有序的数据集上效率降低,而插入排序则相对稳定。 6. **实际应用**: 内部排序算法广泛应用于数据库管理系统、数据分析、机器学习等领域,...