插入排序insertionSort

2023-12-03 06:18

本文主要是介绍插入排序insertionSort,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。

具体算法描述如下:

⒈ 从第一个元素开始,该元素可以认为已经被排序

⒉ 取出下一个元素,在已经排序的元素序列中从后向前扫描

⒊ 如果该元素(已排序)大于新元素,将该元素移到下一位置

⒋ 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置

算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。

Java版本

/**
*插入排序
*/

 public static void insertionSort(int[] a) {int N = a.length;// put smallest element in position to serve as sentinelint exchanges = 0;for (int i = N-1; i > 0; i--) {if (a[i] < a[i-1]) {int swap=a[i-1];a[i-1] = a[i];a[i] = swap;exchanges++;}}if (exchanges == 0) return;// insertion sort with half-exchangesfor (int i = 2; i < N; i++) {int v = a[i];int j = i;while (v < a[j-1]) {a[j] = a[j-1];j--;}a[j] = v;}}

这篇关于插入排序insertionSort的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/448403

相关文章

(六十四)第 10 章 内部排序(静态链表的插入排序)

示例代码 staticLinkList.h // 静态链表的插入排序实现头文件#ifndef STATIC_LINK_LIST_H#define STATIC_LINK_LIST_H#include "errorRecord.h"#define SIZE 100#define NUM 8typedef int InfoType;typedef int KeyType;ty

6.1排序——插入排序与希尔排序

本篇博客来梳理两种常见排序算法:插入排序与希尔排序 常见的排序算法如图 写排序算法的原则:先写单趟,再写整体 一、直接插入排序 1.算法思想 先假定第一个数据有序,把第二个数据插入;再假设前两个数据有序,把第三个数据插入…以此类推,直到整个序列有序 2.具体操作(以排成升序为例) (1)单趟:针对单个数据 假设[0,end]有序,处理end+1处数据(用tmp存起来,原因:挪数据的时

插入排序 【InsertionSort】

插入排序 插入排序的工作方式像排序一手扑克牌。 假设左手的牌是排序好的,桌面上的是未知的牌 1. 开始时,我们的左手为空并且桌子上的牌面向下。 2. 然后,我们每次从桌子上拿走一张牌并将它插入左手正确的位置。 为了找到插入的正确位置,我们将要插入的牌与左手的牌挨着比较,直接找到合适的位置并插入进去。 在实际的实现过程中,我们可以将数组的第0个元素看成是已经排序好的,然后从第二个元素开始进

《数据结构(C语言版)第二版》第八章-排序(8.2-插入排序)

【8.2插入类、8.3交换类、8.4选择类、8.5归并类、8.6分配类 都属于内部排序。 】 8.2 插入排序 8.2.1 直接插人排序 【算法特点】 (1)稳定排序。 (2)算法简便,且容易实现。 (3)也适用于链式存储结构,只是在单链表上无需移动记录,只需修改相应的指针。 (4)更适合于初始记录基本有序(正序)的情况。 当初始记录无序,n较大时,此算法时间复杂度较高,不宜采用。 #in

25版王道数据结构课后习题详细分析 第八章 8.2 插入排序

一、单项选择题 ———————————————————— ———————————————————— 解析:直接插入排序在最坏的情况下要做n(n-1)/2次关键字的比较,当n=5时, 关键字的比较次数为10。注意不考虑与哨兵的比较。 正确答案: ———————————————————— ———————————————————— 解析:由于序列初始基本有序,因此使用直接插入排序

冒泡排序;选择排序;插入排序;快排;判断大小端;位运算

1.冒泡排序:基础        时间复杂度来说:o(n^2) 从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。 #include <stdio.h>int main(void){int str[32] = 0;int i = 0;int j = 0;int len = sizeof(str) / sizeof(str[0]);

排序算法(动图详细讲解)(直接插入排序,希尔排序,堆排序,冒泡排序)

前言:         排序的方式有很多种,不同的排序思想是不一样的。         但是排序的时间复杂度和空间复杂度也都有区别。         例如:         最简单的冒泡排序,时间复杂度为O(N)         对排序的时间复杂度为O(N*logN)。 接下来就来仔细分析每种排序的思路,并写出代码。 插入排序:  基本思想:         直接插入排序是一种简

内部排序之一:插入排序和希尔排序的N中实现

前言    本来想将所有的内部排序总结为一篇博文,但是随着研究的深入,还是放弃了这个念头,斟前酌后,还是觉得分开来写比较好,具体原因,看完本篇博文也就自然明了了。    本篇文章主要探讨插入排序和希尔排序,之所将二者放在一起,很明显,是因为希尔排序是建立在插入排序的基础之上的。    注:以下各排序算法的N种实现方法大部分都是我根据算法思想,自己写出来的,或者是参考其本身的经典实现,

C语言——插入排序

先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。 #include <stdio.h> #include <stdlib.h> void insertion_sort(int *arr, int n) {     for (int i = 1; i < n; i++)     {         int key = arr[i];

(3) 插入排序

一 插入排序 1.1 插入排序 插入排序(Straight Insertion Sort)的基本操作是将一个记录插入到已经排好序的有序表中, 从而得到一个新的有序表,该表中的已排序数据数目加1。 1.2 插入排序实现 func InsetionSort(arr []int) {if arr == nil || len(arr) < 2 {fmt.Println("数组不满足要求")retu