排序基本思想:
从第二个元素开始,用这个元素依次与其前面的每一个元素比较,如大于该元素则将改元素向后移动一个位置直到找到比这个元素小的位置(或者到第一个结束)将这个元素放到改元素的后面即完成排序
算法图示
java代码实现
package com.leiht.sort;
/**
* 直接排序算法java简单实现
*
* @author Leiht
* @date 2015-11-10
*/
public class SortDirect {
public static void main(String[] args) {
int[] numbers = { 56, 45, 78, 67, 99, 13, 34, 49, 55, 34, 12, 77, 1 };
System.out.println("排序之前:");
for (int i = 0; i < numbers.length; i++) {
System.out.print(numbers[i] + " ");
}
// 直接插入排序
for(int i = 1; i < numbers.length; i++) {
int temp = numbers[i];
int j;
//从第i-1个,即前一个开始往前,如果比当前数据(temp)大,则向后移动一个位置,
//直到比当前小,跳出循环
for(j = i-1; j >= 0; j--) {
if(numbers[j] > temp) {
numbers[j+1] = numbers[j];
}else {
break;
}
}
//将当前数据temp放到J+1的位置,J位置数据比当前数据小
numbers[j+1] = temp;
}
System.out.println();
System.out.println("排序之后:");
for (int i = 0; i < numbers.length; i++) {
System.out.print(numbers[i] + " ");
}
}
}
分析(稳定性与时间复杂度)
直接插入排序是稳定的排序,可以理解为当两个元素相同的时候不会交换两个元素的位置
文件初态不同时,直接插入排序所耗费的时间有很大差异。若文件初态为正序,则每个待插入的记录只需要比较一次就能够找到合适的位置插入,故算法的时间复杂度为O(n),这时最好的情况。若初态为反序,则第i个待插入记录需要比较i+1次才能找到合适位置插入,故时间复杂度为O(n2),这时最坏的情况。
直接插入排序的平均时间复杂度为O(n2)
- 大小: 54.8 KB
分享到:
相关推荐
实现以下常用的内部排序算法并进行性能比较:"直接插入排序"," 折半插入排序"," 2—路插入排序"," 表插入排序"," 希尔排序"," 起泡排序"," 快速排序"," 简单选择排序"," 树形选择排序"," 堆排序"," 归并排序"," 链式...
### 数据结构:直接插入排序算法解析 #### 一、引言 在计算机科学领域,排序是一种常见的操作,用于将一组无序的数据按照特定的顺序排列。插入排序是一种简单直观的排序算法,它的工作原理类似于人们手工排序扑克...
通过以上分析,我们了解到如何在单链表上实现直接插入排序算法。这种方式不仅能够有效地对链表中的数据进行排序,还能加深对单链表这一数据结构的理解。需要注意的是,虽然直接插入排序的时间复杂度较高(最坏情况下...
本文通过对堆排序和直接插入排序算法的实现和比较,分析它们的优缺点,并讨论在不同场景下的应用。结果表明,堆排序的时间复杂度优于直接插入排序,但堆排序是不稳定的。因此,在实际应用中,需要根据具体情况选择...
本资源提供了三种经典的排序算法的C语言实现:堆排序、直接插入排序和快速排序。 首先,让我们详细了解这些排序算法。 1. **直接插入排序**: 直接插入排序是一种简单的排序算法,它的工作原理类似于我们手动排序...
总的来说,Java中的直接插入排序算法是一个直观易懂的排序方法,虽然在效率上不敌更高级的排序算法,但它在理解和实现上相对简单,对于初学者来说是很好的学习材料。通过阅读和实践这个源代码,你可以深入理解排序...
### 使用C语言实现的直接插入排序算法 #### 算法概述 本篇文章将详细介绍一个使用C语言编写的直接插入排序算法。直接插入排序是一种简单的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序...
本话题主要探讨六种内部排序算法:直接插入排序、希尔排序、冒泡排序、快速排序、选择排序以及堆排序。这六种排序算法各有优劣,适用于不同的场景,接下来我们将逐一进行详细阐述。 1. **直接插入排序**: 直接...
- **希尔排序**:改进的插入排序,通过增量序列对数据进行预排序,再进行直接插入排序,提高了效率。 - **堆排序**:通过构建堆结构,利用堆的性质进行排序,具有稳定的O(n log n)时间复杂度。 3. **C语言实现**...
直接插入排序、冒泡排序、快速排序、直接选择排序、堆排序和二路归并排序是计算机科学中经典的排序算法,它们在数据处理和算法学习中占有重要地位。这些排序算法各有特点,适用场景不同,下面将逐一详细介绍,并结合...
数据排序算法实验报告 本实验报告主要考察直接插入排序、冒泡...本实验报告展示了直接插入排序算法、冒泡排序算法和快速排序算法的实现和比较,展示了实验步骤、实验结果和实验总结,并讨论了实验结果的分析和结论。
直接插入排序是一种简单...总的来说,直接插入排序是一种基础且实用的排序算法,理解其工作原理和实现方式对学习数据结构和算法非常有帮助。在实际编程中,根据不同的应用场景选择合适的排序算法是提高程序效率的关键。
《数据结构:经典排序算法分析与实现》 排序算法是计算机科学中不可或缺的一部分,它用于组织和优化数据,提高数据处理效率。本文将深入探讨六种经典的排序算法:选择排序、直接插入排序、冒泡排序、希尔排序、快速...
在这一大类排序算法中,有三种常见的实现方式:直接插入排序、希尔排序和折半插入排序。 ### 1. 直接插入排序 直接插入排序是最基础的插入类排序,其步骤如下: 1. 将序列中的第一个元素视为已排序部分。 2. 从第...
在本实验中,大学生需要掌握两种插入排序算法的实现:直接插入排序和折半插入排序。 **一、直接插入排序** 直接插入排序的基本思想是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。...
《常用排序算法分析与实现》 排序算法是计算机科学中不可或缺的一部分,它们在处理大量数据时扮演着关键角色。本文将深入探讨几种经典的排序算法,包括插入排序、选择排序、堆排序、冒泡排序和快速排序,以及归并...
【排序算法实现与性能分析】 排序算法在计算机科学中占据着至关重要的位置,因为它们直接影响程序执行效率。本文主要探讨了五种常见的排序算法:插入排序、冒泡排序、堆排序、合并排序和快速排序,并进行了性能分析...
直接插入排序是一种基础且简单的排序算法,它的工作原理可以形象地比喻为扑克牌的洗牌过程。在实际应用中,虽然对于大规模数据的排序效率不如更高级的算法,如快速排序、归并排序等,但它的实现简单,适合小规模或...
1) 对以下6种常用的内部排序算法进行比较:起泡排序,直接插入排序,简单选择排序,快速排序,希尔排序,堆排序。 2) 待排序记录的文件个数不小于1000( 其数据用伪随机数产生),至少用5组不同的输入数据作比较;比较...
本项目旨在实现并比较六种经典的排序算法——直接插入排序、折半插入排序、起泡排序、简单选择排序、堆排序以及2-路归并排序,使用C语言编程。为了全面评估这些算法,我们将在一组随机生成的30000个整数上运行它们,...