插入排序和插入排序的改进
来源:互联网 发布:免费qq软件下载 编辑:程序博客网 时间:2024/05/22 02:20
插入排序
可以理解为抓牌,默认手里的第一个牌已经排好,然后抓到的牌放在比它小的牌后面。
下面是程序
#include <stdio.h>
// 交换函数
void swap (int a[], int i, int j)
{
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
// 打印数组
void printA (int *a, int len)
{
int i;
for (i = 0; i < len; i++)
{
printf ("%4d", a[i]);
}
printf ("\n");
}
// 冒泡排序
int main()
{
int a[10] = {9,6,8,0,3,5,2,4,7,1};
int len = sizeof(a) / sizeof(a[0]);
int get; // 抓牌
int i,j;
for (i = 1; i < len; i++)
{
get = a[i]; // 抓牌
j = i - 1;
// 找到第一个比抓到的牌小的元素,并且进行移位
while (j >= 0 && a[j] > get)
{
a[j+1] = a[j]; // 如果元素比新抓到的元素大,往后移一个位置
j--;
}
a[j+1] = get; // 将新元素插入第一个比它小的元素的后面
}
printA (a, len);
return 0;
}
对于插入排序,有改进的方法,叫二分插入排序,相对于插入排序,减少比较次数,但没有减少移位操作
先用二分法找到插入位置,,从这个位置往后,全部后移一个
下面是程序
#include <stdio.h>
// 交换函数
void swap (int a[], int i, int j)
{
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
// 打印数组
void printA (int *a, int len)
{
int i;
for (i = 0; i < len; i++)
{
printf ("%4d", a[i]);
}
printf ("\n");
}
// 二分插入排序
int main()
{
int a[10] = {9,6,8,0,3,5,2,4,7,1};
int len = sizeof(a) / sizeof(a[0]);
int left, right,mid,i,j,get;
for (i = 1; i < len; i++)
{
get = a[i]; // 抓牌
left = 0; // 确定左边界
right = i - 1; // 确定右边界
// 找插入位置:查找完后要插入的位置在下标为left的位置
while (left <= right)
{
mid = (left + right)/2;
if (a[mid] > get) // 要插入的位置在mid的左边
{
right = mid - 1; // 重新设定右边界
}
else // 要插入的位置在mid的右边
{
left = mid + 1; // 重新设定左边界
}
}
// 移位操作:将left开始右边的所有元素都右移一位
for (j = i-1; j >= left; j--)
{
a[j+1] = a[j];
}
a[left] = get; // 插入新元素
}
printA (a, len);
return 0;
}
- 插入排序和插入排序的改进
- 改进的插入排序算法
- 插入排序的改进2:希尔排序
- 2路插入排序-插入排序的改进
- 插入排序改进-折半插入排序
- 插入排序及插入排序改进
- 插入排序改进之二分插入排序
- 改进后的直接插入排序
- 直接插入排序及改进
- 几种常见的排序算法(插入排序,希尔排序,归并排序和快速排序),算法分析以及改进
- 归并排序的自底向上改进-使用插入排序
- 希尔排序(插入排序的改进)C++实现
- 直接插入排序到希尔排序做的那些改进
- 算法<改进的冒泡排序、直接插入排序、折半插入排序、希尔排序、快速排序、归并排序>
- 排序算法之插入排序及其改进
- 插入排序高效改进之希尔排序
- 改进排序算法:希尔排序(对直接插入排序的改进)
- 小根堆的插入和排序
- wget 介绍
- 动态内存分配 数组
- hdu5694(规律+分治)BD String
- Linux网络编程之accept函数
- 设计模式--外观模式(十二)
- 插入排序和插入排序的改进
- 割接
- laravel -- Eloquent 模型关联
- ListView中存在EditText,弹出键盘后焦点丢失问题。
- Centos7.3_64位安装Apache2.4_mysql5.7_php5.4(阿里云LAMP php环境搭建图文教程)
- 最长递增子序列
- 焦点图,轮播图效果
- 重构原则(一)
- 工程之间的跳转