希尔排序
来源:互联网 发布:淘宝网买汽车 编辑:程序博客网 时间:2024/06/05 14:59
算法介绍
希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因 DL.Shell 于1959 年提出而得名。
基本思想
先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的) 分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序 (增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基 本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前三 种方法有较大提高。
案例
第一轮排序,如图
//// 希尔排序// Created by 刘龙玲 on 16/5/14.// Copyright © 2016年 liulongling. All rights reserved.//#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX 10//打印函数void PrintArray(int arr[], int length){ for (int i = 0; i < length; i++){ printf("%d ", arr[i]); } printf("\n");}//从小到大排序void ShellSort(int arr[], int length){ int a = length; int k = 1; while(a > 1) { //确定分组的增量 a = a / 2; for(int i = 0; i < a;i++) { for(int j = i+a;j<length;j+=a) { int temp =arr[j]; int x; for(x = j - a;x>=0&&arr[x] > temp;x=x-a) { arr[x+a]=arr[x]; } arr[x+a]=temp; } } printf("第%d轮排序结果:",k++); PrintArray(arr,MAX); }}int main(void){ int arr[MAX] ={9,0,2,6,1,7,8,4,3,4}; printf("%s \n","排序前"); PrintArray(arr, MAX); ShellSort(arr, MAX); printf("%s \n","排序后"); PrintArray(arr, MAX); return 0;}
运行结果
排序前
9 0 2 6 1 7 8 4 3 4
第1轮排序结果:7 0 2 3 1 9 8 4 6 4
第2轮排序结果:1 0 2 3 6 4 7 4 8 9
第3轮排序结果:0 1 2 3 4 4 6 7 8 9
排序后
0 1 2 3 4 4 6 7 8 9
0 0
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- Bootstrap 一个案例应用
- c语言学习笔记13之二维数组1
- recyclerview使用详解
- XMG 让一张图片由两个控件显示出来
- Spark-Streaming处理Kafka数据——封装成对象处理
- 希尔排序
- Java实现将一个文件进行压缩
- php与Java的比较
- 测试内存屏障存在
- X264码率控制总结1——ABR,CQP,CRF
- #版本管理工具使用总结(git,svn,hg)
- 数据库SQL优化大总结之 百万级数据库优化方案
- 通用单链表C实现
- kali