直接插入排序示例:
此处以数据2的排序为例,用i从左到右遍历到下标为5的位置,发现此处的值2小于前一位的值5
下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
数据 | 1 | 3 | 4 | 5 | 2 | 6 | |
遍历位置 | i |
将2放到缓存0的位置,然后数据5后移,j从i的前两位即下标3开始遍历
下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
数据 | 2 | 1 | 3 | 4 | 5 | 5 | 6 |
遍历位置 | j | i |
a[0]<a[j],a[j]后移,j前移到下标2
下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
数据 | 2 | 1 | 3 | 4 | 4 | 5 | 6 |
遍历位置 | j | i |
a[0]<a[j],a[j]后移,j前移到下标1
下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
数据 | 2 | 1 | 3 | 3 | 4 | 5 | 6 |
遍历位置 | j | i |
a[0]>a[j],a[j+1]=a[0]
下标 | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|
数据 | 2 | 1 | 2 | 3 | 4 | 5 | 6 |
遍历位置 | j | i |
此时就完成了数据2的排序
代码实现:
说明:本博客的代码实现贴近数据结构(C语言版) 课本代码风格,使用抽象数据类型。
项目结构
status.h
#pragma once
#include <stdarg.h>
#include <stdlib.h>
#include <iostream>
#define TRUE 1 //真
#define FALSE 0 //假
#define YES 1 //是
#define NO 0 //否
#define OK 1 //通过
#define ERROR 0 //错误
#define SUCCESS 1 //成功
#define INFEASIBLE -1 //不可行
//#define OVERFLOW -2 //堆栈上溢
//#define UNDERFLOW -3 //堆栈下溢
#define PAUSE system("pause") //暂停
typedef int Status; //函数类型,其值为状态码
typedef int DataType; //抽象数据类型
DataType max(int num1, ...);//求一组数中的最大值
DataType min(int num1,