直接插入排序,希尔排序,快速排序
来源:互联网 发布:淘宝海关拍卖车可靠吗 编辑:程序博客网 时间:2024/05/19 19:34
1.直接插入排序
原理:就是把一个元素向已经排好序的序列中插入(倒着遍历这个已经排好序的序列,找到合适的位置,后面的元素都后移一位,然后插入进去)
//直接插入排序
void directSort(int a[],int n)
{
int key,j;
for(int i =1; i<n; i++)//从第二个开始,因为第一个相当于已经排好序了
{
key = a[i];//记录要插入的元素
for (j=i; j>=1; j--)//开始倒着遍历
{
if (a[j-1]>=key)//遇到比他大的,就后移
{
a[j] = a[j-1];//后移
}else //直到遇到第一个比他小的,就跳出循环
{
break;
}
}
a[j]=key;//赋值
}
2.希尔排序
原理:对直接插入排序的优化。先分组,然后使用直接插入排序
void xierTest(int a[],int count)
{
int n = count/2;//分组是对半去分(组之后会越来越多)
int j ,i,key;
while (n>0)
{
for (i =0; i < n; i++)//依次拿每个组的相同位置去对比
{
key = a[i];
for (j = i; j < count; j+=n)//然后按照直接插入排序的思想,对每个组相同位置的元素进行排序
{
if (key > a[j]) {
a[j] = a[j-n];
}else
{
break;
}
}
a[j] = key;
}
n = n/2;
}
}
3.快速排序
原理:简单点说就是选一个基准,然后实现比他小的在他左边,比他大的在他右边
快速排序 选取一个基准,然后先从右边扫描,直到遇到比基准小的(称为A),就把A放到基准左边,然后开始从左边扫描,直到遇到比基准大的(称为B),就B放到基准右边,然后又从右边开始扫描。最后直到左右两边对接上,就停止了。实现了左边的都是比基准小的,右边都是比基准大的,然后再递归调用左右两边的小数组,直到完成排序
void quickSort(int a[] ,int left, int right)
{
//递归结束条件是相遇
if (left >= right) {
return;
}
int i = left;
int j = right;
int key = a[left];
while (i<j)
{
while (i<j&& a[j]>=key)//比他大的,就继续向左扫描
{
j--;
}
a[i] = a[j];//直到遇到第一个比他小的,放到左边
while (i<j && a[i]<key)//比他小的,就继续向右扫描
{
i++;
}
a[j] = a[i];//直到遇到第一个比他大的,放到右边
}
a[i] = key;//排序完成,讲基准值回归
quickSort(a, left, i-1);//递归去排序左边的
//中间的数不需要再动
quickSort(a, i+1, right);//递归去排序右边的
}
- 直接插入排序,希尔排序,快速排序
- 直接插入排序、希尔排序、冒泡排序、快速排序
- 排序算法java 一 --快速排序、直接插入、希尔排序
- 直接插入排序 + 希尔排序+ 冒泡排序+ 快速排序 + 直接选择排序 + 堆排序
- 直接插入排序,希尔排序
- 直接插入排序、希尔排序
- 直接插入排序-->希尔排序
- 直接插入 选择 快速 希尔排序 总结
- 冒泡排序 快速排序 选择排序 堆排序 直接插入排序 希尔排序 归并排序
- 插入排序-直接插入排序 希尔排序
- 排序算法汇总(选择排序 ,直接插入排序,冒泡排序,希尔排序,快速排序...)
- IOS- 快速排序,冒泡排序,直接插入排序和折半插入排序,希尔排序,堆排序,直接选择排序
- 排序算法: 冒泡排序, 快速排序,希尔排序,直接插入排序 ,直接选择排序,归并排序,堆排序
- 插入,希尔,快速排序
- 常见排序集合(冒泡排序,选择排序,直接插入排序,二分插入排序,快速排序,希尔排序,归并排序)
- 八大排序算法总结之一(冒泡排序,快速排序,直接插入排序,希尔排序)
- 编程实现直接插入排序、希尔排序、冒泡排序、快速排序、选择排序
- 八大排序算法总结之一(冒泡排序,快速排序,直接插入排序,希尔排序)
- APP瘦身之webp实践
- SVN 分支合并到主干
- Intent传递List和Object和List<Object>(附源码)(转)
- JDK 8 的 bin 目录程序
- Sql基础语句1
- 直接插入排序,希尔排序,快速排序
- AVPlayerLayer
- Linux正则过滤命令ifconfig/ip提取IP地址
- 什么是死锁和如何解决死锁
- 实现Mysql数据库免安装配置 及 与 MyEclipse的连接
- 纯css绘制三角形
- Google Breakpad--VS2015 编译、使用、定位错误(如何使用gyp)
- stl vector使用
- js直接输出html标签