希尔排序
来源:互联网 发布:java爬虫验证码 编辑:程序博客网 时间:2024/06/07 23:21
希尔排序其实就是特殊的插入排序:先设定间距,然后根据间距将数组分解成子数组,然后子数组进行插入排序。比如:
10张牌(0-9),假设间距是3:0、3、6、9是一组;1、4、7一组;2、5、8是一组。先根据插入排序将这三组排序。
然后间距-1,则:0、2、4、6、8一组;1、3、5、7、9一组;再排序这两组。
最后间距为1,则10个到一组,最后排序。
看上去很傻,但是优势在于减少了换位置的次数,因为插入排序的优势在于对较为有序的数列排序,如果反序,当数据很大时候,每次都要比较很多次。
#include <stdio.h>void XiEr_sort(int Numbers[],int n){ int dk = 3 ; int i,j; for (dk = 3; dk>0; dk--) { //对于每个增量dk,对子数组进行直接排序 for (i=0; i+dk<n; i+=dk) { for (j=i+dk; j-dk>=0; j-=dk) { if (Numbers[j] > Numbers[j-1]) { break; } else { int temp = Numbers[j]; Numbers[j] = Numbers[j-1]; Numbers[j-1] = temp; } } } }}int main(){ int Numbers[10] = {1,4,2,3,4,5,6,11111,2222,333}; XiEr_sort(Numbers,10); int i; for (i=0;i<10;i++) { printf("%d ",Numbers[i]); } printf("\n"); return 0;}
0 0
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- Java Web 文章管理系统(Jsp+Ajax+JDBC+MySql实现)
- Spring Boot 学习8--使用Jpa
- jsp乱码
- 8种基本类型的包装类和常量池简单介绍
- spring 的jar各包作用
- 希尔排序
- ntpd、ntpdate的区别
- MyEclipse+Maven开发Web工程的详细配置过程
- JAVA多线程—并发集合
- Android7.1 悬浮窗Unable to add window crash问题
- 递归-数组的子集:leetcode 78 Subsets
- n个a之和
- Vue form 表单提交+ajax异步请求+分页
- 【linux】vmware 搭建多个互通的虚拟机