[直接插入排序]动画详解直接插入排序

💖💖💖欢迎来到我的博客,我是anmory💖💖💖
又和大家见面了
欢迎来到动画详解数据结构系列
作为一个程序员你不能不掌握的知识
先来自我推荐一波
个人网站欢迎访问以及捐款
推荐阅读
如何低成本搭建个人网站
专栏:动画详解leetcode算法题
C语言知识
玉桂狗睡觉

动画详解

动画详解直接插入排序

文字讲解

其本质就是类似于打扑克的时候的洗牌,挑出一张牌然后插入到前面的已经排好序的牌中去
这里我们假设[0,end]这个区间是有序的,那么我们就需要将end+1的位置插入到前面的序列中,使其继续保持有序状态
这样一次循环,就能实现插入排序了

代码实现(多种语言)

C语言版本

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <assert.h>

// 直接插入排序
void InsertSort(int* a, int n)
{
	for (int i = 0; i < n - 1; i++)
	{
		int end = i;
		int tmp = a[end + 1];
		while (end >= 0)
		{
			if (a[end] > tmp)
			{
				a[end + 1] = a[end];
				end--;
			}
			else
			{
				break;
			}
		}
		a[end + 1] = tmp;
		
	}
}

// 打印函数
void PrintArray(int* a, int n)
{
	for (int i = 0; i < n; i++)
	{
		printf("%d ", a[i]);
	}
	printf("\n");
}

// 测试函数
void TestSort()
{
	int a[10] = { 9,6,7,3,4,2,1,0,5,8 };
	int len = sizeof(a) / sizeof(a[0]);
	InsertSort(a, len);
	PrintArray(a,len);
}

int main()
{
	TestSort();
	return 0;
}

pyhton版本

import random
import time

def insert_sort(a):
    for i in range(1, len(a)):
        end = i - 1
        tmp = a[i]
        while end >= 0:
            if a[end] > tmp:
                a[end + 1] = a[end]
                end -= 1
            else:
                break
        a[end + 1] = tmp

def print_array(a):
    print(" ".join(str(x) for x in a))
    print()

def test_sort():
    a = [9, 6, 7, 3, 4, 2, 1, 0, 5, 8]
    insert_sort(a)
    print_array(a)

if __name__ == "__main__":
    test_sort()

java代码

import java.util.Arrays;

public class InsertionSortExample {

    // 直接插入排序
    public static void insertSort(int[] a) {
        for (int i = 1; i < a.length; i++) {
            int end = i - 1;
            int tmp = a[i];
            while (end >= 0) {
                if (a[end] > tmp) {
                    a[end + 1] = a[end];
                    end--;
                } else {
                    break;
                }
            }
            a[end + 1] = tmp;
        }
    }

    // 打印数组函数
    public static void printArray(int[] a) {
        System.out.println(Arrays.toString(a));
    }

    // 测试函数
    public static void testSort() {
        int[] a = {9, 6, 7, 3, 4, 2, 1, 0, 5, 8};
        insertSort(a);
        printArray(a);
    }

    public static void main(String[] args) {
        testSort();
    }
}

php代码

<?php

function insertionSort(&$arr) {
    for ($i = 1; $i < count($arr); $i++) {
        $end = $i - 1;
        $tmp = $arr[$i];
        while ($end >= 0) {
            if ($arr[$end] > $tmp) {
                $arr[$end + 1] = $arr[$end];
                $end--;
            } else {
                break;
            }
        }
        $arr[$end + 1] = $tmp;
    }
}

function printArray($arr) {
    echo implode(" ", $arr) . "\n";
}

function testSort() {
    $a = [9, 6, 7, 3, 4, 2, 1, 0, 5, 8];
    insertionSort($a);
    printArray($a);
}

testSort();

?>

go代码

package main

import (
	"fmt"
	"time"
)

// 直接插入排序
func insertSort(a []int) {
	for i := 1; i < len(a); i++ {
		end := i - 1
		tmp := a[i]
		for end >= 0 {
			if a[end] > tmp {
				a[end+1] = a[end]
				end--
			} else {
				break
			}
		}
		a[end+1] = tmp
	}
}

// 打印数组
func printArray(a []int) {
	for _, v := range a {
		fmt.Printf("%d ", v)
	}
	fmt.Println()
}

// 测试排序函数
func testSort() {
	a := []int{9, 6, 7, 3, 4, 2, 1, 0, 5, 8}
	insertSort(a)
	printArray(a)
}

func main() {
	testSort()
}

总结

💖💖💖非常感谢各位的支持💖💖💖
我们共同进步
本系列持续更新,关注我,带你了解更多数据结构知识
下期再见
玉桂狗睡觉

  • 17
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
链表实现直接插入排序是一种常用的排序算法。它可以通过修改链表中的指针来给出排序结果,而不需要移动元素。具体实现步骤如下: 1. 创建一个头结点,作为新链表的起点,并将原链表的第一个结点作为已排序的部分。 2. 从原链表中取下一个结点,将其插入到已排序的链表中的正确位置,保持链表的有序性。 3. 重复步骤2,直到所有结点都被插入到已排序的链表中。 具体的代码实现可以参考引用中给出的代码示例,其中使用了头结点和两个指针(p和q)来实现链表的插入操作。在每次插入结点后,可以通过输出链表的值来验证排序的进程。 需要注意的是,链表实现的直接插入排序算法不改变原链表中元素的位置,而是在链表中给出其在排序表中的位置。这种算法适用于对链表进行排序的场景。 总结起来,链表实现直接插入排序的步骤包括: 1. 创建一个头结点,并将原链表的第一个结点作为已排序的部分。 2. 从原链表中取下一个结点,并将其插入到已排序的链表中的正确位置。 3. 重复步骤2,直到所有结点都被插入到已排序的链表中。 这样就可以利用链表实现直接插入排序算法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [基于双链表的直接插入排序、直接选择排序、冒泡排序](https://download.csdn.net/download/m0_62171658/86731089)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [直接插入排序算法之表插入排序详解](https://blog.csdn.net/sunnyoldman001/article/details/127080111)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [链表直接插入排序](https://blog.csdn.net/qq_41027398/article/details/122275622)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿梦Anmory

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值