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

💖💖💖欢迎来到我的博客,我是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()
}

总结

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

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿梦Anmory

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

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

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

打赏作者

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

抵扣说明:

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

余额充值