插入排序介绍
- 初始时手里(有序区)只有一张牌
- 每次(从无序区)摸一张牌,插入到手里已有牌(有序区)的正确位置
- 时间复杂度:O(n^2)
#include<stdio.h> void Print(int li[], int n) { int i = 0; for (i = 0; i < n; i++) { printf("%d ", li[i]); } printf("\n"); } void insert_sort(int li[], int n) { int i = 0; int j = 0; Print(li, n);//验证 for (i = 1; i < n; i++)// i表示摸到的牌的下标,即无序区的第一个元素 { int tmp = li[i]; j = i - 1;// 指的是手里的牌的下标,即有序区最后一个元素 while (j >= 0 && li[j] > tmp)// 找到要插入的位置 { //从有序区最后一个元素开始,在序区中把比tmp(无序区第一个元素)大的元素往右移动 li[j + 1] = li[j]; j--; } li[j + 1] = tmp;//插入 Print(li, n);//验证 } Print(li, n);//验证 } int main() { int li[] = { 3,2,4,1,5,7,9,6,8 }; int n = sizeof(li) / sizeof(li[0]); insert_sort(li, n); return 0; }
插入排序(Insert Sort)
最新推荐文章于 2023-07-26 17:45:51 发布