直接插入排序的两种实现方式
来源:互联网 发布:软件字体大小怎么设置 编辑:程序博客网 时间:2024/06/05 09:40
定义:每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。
时间复杂度:O(n^2)
时间复杂度:O(n^2)
#include <stdio.h>void printArray(int arr[], int n) { int i = 0; for (i = 0; i < n; ++i) { printf("%d ", arr[i]); } printf("\n");}/* * 将数字插入到已经有序的数组(数组中的第一个元素,认为是有序的)中,使数组任然有序,类似我们打扑克牌时摸牌的过程。 * 过程: * 1 在有序的元素中"从前完后"找到插入的位置; * 2 保存要插入的元素(因为往后移的过程中会覆盖改元素),将该位置之后的元素往后移(从后面开始移); * 3 插入该元素; * 4 重复1-3直到最后一个元素。 * */void insertionSort(int arr[], int n) { int i = 0; int j = 0; int k = 0; for (i = 1; i < n; ++i) { // 查找插入位置j for (j = 0; j < i ; ++j) { if (arr[i] < arr[j]) { break; } } if (j != i) { int tmp = arr[i]; // 将插入位置之后的元素往后移 for (k = i; k > j; --k) { arr[k] = arr[k - 1]; } // 插入该元素 arr[j] = tmp; } }}/* * 优化一,在查找插入位置的过程中移动元素。 * */void insertionSort1(int arr[], int n) { int i = 0; int j = 0; int k = 0; int tmp = 0; for (i = 1; i < n; ++i) { tmp = arr[i]; // 查找插入位置,同时移动元素 for (j = i; tmp < arr[j - 1] && j > 0 ; --j) { arr[j] = arr[j - 1]; } // 简单的赋值,可不加此判断 if (i != j) { // 插入该元素 arr[j] = tmp; } }}int main() { int arr[10] = {0, 7, 2, 8, 1, 3, 4, 9, 5, 6}; insertionSort1(arr, 10); printArray(arr, 10);// 输出:0, 1, 2, 3, 4, 5, 6, 7, 8, 9 return 0;};
0 0
- 直接插入排序的两种实现方式
- 常用排序算法之二:直接插入排序的两种实现方式
- 直接插入排序的三种实现
- 直接插入排序的三种实现
- 直接插入排序的三种实现
- 直接插入排序的三种实现
- 直接插入排序的三种实现
- 直接插入排序的三种实现
- 直接插入排序的三种实现
- 直接插入排序的实现
- 插入排序的两种实现
- [排序算法]--直接插入排序的三种实现(Java)
- 插入排序的实现方式
- 直接插入排序的四种实现方法
- 直接插入排序的三种实现Java
- 直接插入排序的三种实现(c++)
- 直接插入排序的C++实现代码
- 直接插入排序的 Java实现
- Regionals 2014 >> Latin America >> 6828 - Help cupid
- POJ 2987 Firing(最大权闭合)
- HDU1032 - The 3n + 1 problem (暴力)
- 关于Android studio彻底修改包名的解决办法
- Android适配器-附万能适配器工具类
- 直接插入排序的两种实现方式
- Dispatcher initialization failed Unable to load configuration
- java可变参数
- rdb快照持久化
- 在eclipse下创建maven版的hello world
- 切换Android SDK Manager下载源
- sql 链表查询语句
- 寻找数组中的最大值和最小值
- 九度OJ-题目1464:Hello World for U