💖💖💖欢迎来到我的博客,我是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()
}
总结
💖💖💖非常感谢各位的支持💖💖💖
我们共同进步
本系列持续更新,关注我,带你了解更多数据结构知识
下期再见