直接插入排序
来源:互联网 发布:买房代款利息怎么算法 编辑:程序博客网 时间:2024/05/17 00:11
(1)概念:
直接插入排序(Insertion Sort),是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对未排序的数据,在已排序序列中从后向前扫描,找到相应位置并插入。
(2)性能分析:
最差时间复杂度:O(n^2)
最优时间复杂度:O(n)
平均时间复杂度:O(n^2)
稳定性:稳定
(3)步骤:
1)从第一个元素开始,该元素可以认为已被排序;
2)取出下一个元素,在已经排序的元素序列中从后向前扫描;
3)如果该元素(已排序)大于新元素,将该元素移到下一个位置;
4)重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
5)将新元素插入到该位置后,重复2~5
执行步骤示意图,如下图所示:
(4)实现代码:
void InsertSort(int *arr, int len)//len为要排序数的数目{ //判断异常情况 if (arr == NULL || len <= 0) { return; } //排序从第二个数开始 for (int j = 1; j < len; j++)//j为要排序数的下标 { int key = arr[j];//定义临时变量存放要排序的数 int i = j - 1;//i为要比较的数的下标 while (i >= 0 && key < arr[i]) { arr[i + 1] = arr[i];//记录后移 i--; } arr[i + 1] = key;//插入到正确位置 }}
(5)程序
#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#include<stdlib.h>void InsertSort(int *arr, int len){ for (int j = 1; j < len; j++)//j为要排序数的下标 { int key = arr[j];//定义临时变量存放要排序的数 int i = j - 1; while (i >= 0 && key < arr[i]) { arr[i + 1] = arr[i]; i--; } arr[i + 1] = key; }}void test(){ int arr[] = { 3, 2, 1, 5, 4 }; InsertSort(arr, 5); for (int i = 0; i < 5; i++) { printf("% d", arr[i]); } printf("\n");}int main(){ test(); system("pause"); return 0;}
运行结果为:
阅读全文
0 0
- 插入排序--直接插入
- 插入排序------直接插入
- 插入排序---直接插入
- 排序:直接插入排序
- 排序---直接插入排序
- 排序 -- 直接插入排序
- 排序---直接插入排序
- 排序--直接插入排序
- 排序-直接插入排序
- 【排序】直接插入排序
- 排序--直接插入排序
- 排序:直接插入排序
- 【排序】直接插入排序
- 排序--直接插入排序
- 排序--直接插入排序
- 排序-直接插入排序
- 插入排序--直接插入排序
- 插入排序-直接插入排序
- std::shared_ptr 与普通指针的转换
- 在java给别人邮箱发邮件
- 单元测试
- Java 执行系统命令
- 基础知识01
- 直接插入排序
- 快速排序--挖坑填数+分治法
- 一个评测指标就是MAP(Mean Average Precision)平均精度均值。
- C++三大特性
- 面向对象的三大特性之(三)多态
- Kotlin快速上手,基础知识点总结
- AndroidStudio代码混淆应用加固模板
- python添加搜索路径的方法
- Android-ABIFilter-Device supports x86,but APK only supports armeabi-v7a,armeabi,x86_64