`
cooliufang
  • 浏览: 130212 次
社区版块
存档分类
最新评论

Java排序算法之 —— 插入排序

阅读更多
package algorithm.sort;

/**
 * 原理:插入排序使用的是增量方法,每次将一个待排序的数,插入到已经排好序的数组中,
 * 直到所有待排序的数都插入到有序数组中为止(类似于摸牌后整理牌)。
 * @author Administrator
 */
public class InsertSort {

	//按照升序排序
	public void insertSortUp(int[] a) {
		//第一层循环,对待插入的元素进行循环,从第二个元素开始,直到最后一个
		for (int i = 2; i < a.length; i++) {
			int key = a[i];	//待插入的元素
			//第二层循环,对已排序的数组从第一个元素开始循环,找出第一个大于待插入元素的
			int j = i - 1;
			while (j >= 0 && a[j] > key) {
				a[j+1] = a[j];	//从插入点开始的元素都向后移一个位置
				j--;
			}
			a[j+1] = key;		//将待插入元素插到已排序数组中			
		}
	}
	
	/**
	 * 递归插入排序:为排序A[1..n],先递归排序A[1..n-1],
	 * 然后再将A[n]插入到已排序的A[1..n-1]中去
	 * @param a:待排序的数组
	 * @param n:待插入的元素序号
	 */
	public void recursiveInsertSort(int[] a, int n) {
		if(n > 0) {
			recursiveInsertSort(a, n-1);
			//将待插入元素插入已排序数组中
			for (; n > 0 && a[n-1] > a[n]; n--) {
				int temp = a[n-1];
				a[n-1] = a[n];
				a[n] = temp;				
			}
		}
	}
	
	//打印数组
	public void printArr(String str, int[] a) {
		System.out.print(str + "\t");
		for(int i = 0; i < a.length; i++)
			System.out.print(a[i] + " ");
		System.out.println();
	}
	
	public static void main(String[] args) {
		InsertSort is = new InsertSort();
		
		int[] a = {2,2,6,8,3,4};
		is.printArr("排序前:", a);
		is.insertSortUp(a);
		is.printArr("排序后:", a);
		
		int[] b = {4,8,0,2,5,1};
		is.printArr("排序前:", b);
		is.recursiveInsertSort(b, b.length-1);
		is.printArr("排序前:", b);
	}

}


//output~
排序前: 2 2 6 8 3 4
排序后: 2 2 3 4 6 8
排序前: 4 8 0 2 5 1
排序前: 0 1 2 4 5 8
分享到:
评论

相关推荐

    java算法——插入排序

    插入排序: * 始终定义第一个元素为有序, 将无序元素 * 逐个插入到有序排列之中,不断的移动数据, * 空出一个适当的位置,把待插入的元素放到里 * 面去。

    算法可视化系列——排序算法——希尔排序

    希尔排序(Shell Sort)是一种基于插入排序的快速排序方法,由Donald Shell于1959年提出。它的主要思想是将待排序的数据按照一定的间隔进行分组,然后对每组进行插入排序,随着间隔逐渐缩小,最后进行一次全排列,...

    java版本排序算法

    以上介绍了三种基本的排序算法——插入排序、冒泡排序和选择排序。虽然它们在处理小规模数据集时表现良好,但在大规模数据集面前,这些算法的性能通常不如更高效的算法,如快速排序、归并排序等。然而,了解这些基础...

    最快的排序算法 图解八大排序算法——我见过的最详细的讲解(转),排序算法数据结构

    常见的排序算法有八种,即选择排序、冒泡排序、插入排序、归并排序、快速排序、堆排序、.radix 排序和基数排序。 一、分类 内部排序和外部排序是两种基本的排序分类。内部排序是指待排序记录存放在计算机随机...

    排序算法 Java经典算法

    首先,我们来看看基础的排序算法——冒泡排序。冒泡排序是最简单的交换排序,通过重复遍历待排序的数列,依次比较相邻元素并根据需要交换它们的位置,直到没有任何一对数字需要交换为止。虽然效率较低,但它对于理解...

    Java数据结构和算法

    (10)数据结构之红黑树(三)——删除操作 (11)排序算法(一)——冒泡排序及改进 (12)排序算法(二)——选择排序及改进 (13)排序算法(三)——插入排序及改进 (14)排序算法(四)——归并排序与递归...

    java实现的4种排序算法(冒泡、快速、插入、选择)

    以下是根据标题和描述中提到的四种排序算法——冒泡排序、快速排序、插入排序和选择排序的详细说明。 **冒泡排序(BuddleSort)**: 冒泡排序是一种简单的交换排序,它通过重复遍历待排序的列表,比较相邻元素并...

    各种排序算法java实现

    标题 "各种排序算法java实现" 涉及到的是计算机科学中的一个重要领域——算法,特别是排序算法在Java编程语言中的具体应用。排序算法是数据结构与算法分析中的基础部分,它们用于将一组数据按照特定顺序排列。在这个...

    《Java数据结构和算法》学习笔记(2)——4种简单排序算法

    本文将深入探讨四种简单的排序算法:插入排序、冒泡排序、选择排序。这些算法虽然在复杂度上不如高级排序算法如快速排序或归并排序,但它们提供了基础的排序逻辑,有助于理解更复杂的算法思想。 首先,我们来详细...

    java算法——希尔排序

    按下标的一定增量分组,对每组使用直接插入算法排序;随着增量 * 逐渐减少,每组包含的关键字越来越多,当增量减至1时,整个文件恰 * 好被分成一组,算法便终止。 * 8,9,1,7,2,3,5,4,6,0 * //初始增量 gap=...

    数据结构与算法分析——Java语言描述-带书签目录高清扫描版

    排序算法如冒泡排序、选择排序、插入排序、快速排序、归并排序和堆排序,各有优缺点,适用于不同的数据特性。查找算法包括顺序查找、二分查找和哈希查找,其中哈希表提供了近乎常数时间的查找效率。此外,高级算法如...

    Java经典算法50题——答案下载!

    1. 排序算法:包括冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等,理解每种排序算法的工作原理和时间复杂度是至关重要的。 2. 搜索算法:线性搜索、二分搜索、深度优先搜索(DFS)、广度优先搜索...

    数据结构与算法分析——Java语言描述

    常见的排序算法(如冒泡排序、快速排序、归并排序、堆排序)和查找算法(如线性查找、二分查找)都有详尽的解释和实例。此外,还包括动态规划、贪心算法、回溯法等高级算法思想。算法分析不仅关注实现,更强调时间...

    排序算法_java

    本文将深入探讨标题和描述中提及的五种经典排序算法——插入排序、归并排序、选择排序、冒泡排序和希尔排序,以及它们在Java中的实现。 1. 插入排序(Insertion Sort) 插入排序是一种简单直观的排序算法,它的工作...

    排序算法(Java描述)

    本文将深入探讨两种经典的排序算法——选择排序和插入排序,并通过Java语言进行具体描述,旨在帮助读者理解这两种算法的工作原理、时间复杂度以及实际应用。 #### 选择排序:效率与简洁性的权衡 选择排序是一种简单...

    数据结构与算法答案——java语言描述

    5. **排序算法**:包括冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等。Java的`Collections.sort()`方法使用了高效的排序算法,如TimSort,了解这些算法的原理有助于编写高性能的代码。 6. **图与树*...

    java中和排序算法

    ### Java中的排序算法详解 #### 一、排序算法的分类 根据给定文件中的描述,Java中的排序算法大致可以分为以下几类: 1. **插入排序**:包括直接插入排序、折半插入排序、希尔排序等。 2. **交换排序**:主要包括...

Global site tag (gtag.js) - Google Analytics