希尔排序——C语言】的更多相关文章

希尔排序 希尔排序是插入排序的一种,又称“缩小增量排序”,希尔排序是直接插入排序算法的一种更高效的改进版本,关于插入排序可以看下这篇随笔:插入排序——C语言 (图片来源:https://www.cnblogs.com/fivestudy/p/10212306.html) 1.希尔排序的基本思想: 设待排序元素序列有n个元素,首先取一个整数increment(小于n)作为间隔将全部元素分为n/increment个子序列,所有距离为increment的元素放在同一个子序列中,在每一个子序列中分别实行…
//由小到大 //希尔排序 void shellSort( long int array[], int length) { int i; int j; int k; int gap; //gap是分组的步长 long int temp; //希尔排序是在直接插入排序的基础上实现的,所以仍然需要哨兵 ; gap>; gap=gap/) { //以GAP为间隔分组 ; i<gap; i++) { /* 每一组做插入排序 */ for(j=i+gap; j<length; j=j+gap) {…
原创文章,转载请注明来自钢铁侠Mac博客http://www.cnblogs.com/gangtiexia 希尔排序(Shell's Sort)又称“缩小增量排序”(Diminishing Increment Sort)的基本思想不断缩小步长后分组排序,具体步骤为   演示实例:       C语言实现(编译器Dev-c++5.4.0,源代码后缀.cpp)   #include <stdio.h> #define LEN 9 typedef float keyType; typedef str…
由于考试耽搁了几天,不好意思~~~ 前面的介绍的三种排序算法,都属于简单排序,大家能够看下详细算法,时间复杂度基本都在0(n^2),这样呢,非常多计算机界.数学界的牛人就非常不爽了,他们在家里想啊想,吃饭的时候在想,窝粑粑的时候也在想,到底能不能把时间复杂度搞低点呢.最终,皇天不负有心人啊,王母娘娘显灵了,最终被DL. SHELL这哥们给想出来了.他所创造的希尔(shell)排序是世界上第一个打破0(n^2)的时间复杂度的算法.牛逼不? 好了,言归正传. 希尔排序: 希尔排序,也称递减增量排序算…
在上一篇博文中我们提到:要令排序算法的时间复杂度低于O(n2),必须令算法执行"远距离的元素交换",使得平均每次交换减少不止1逆序数. 而希尔排序就是"简单地"将这个道理应用到了插入排序中,将插入排序小小的升级了一下.那么,希尔排序是怎么将这个道理应用于插入排序的呢?我们先来回顾一下插入排序的代码: void InsertionSort(int *a, unsigned int size) { int CurPos; //CurPos表示执行插入的元素当下所处的下标…
#include<stdio.h> void shellsort(int* data,int len) { int d=len; int i; ) { d=(d+)/; //增量序列表达方式 ;i<len-d;i++) { if(data[i+d]<data[i]) { int temp=data[i+d]; data[i+d]=data[i]; data[i]=temp; } } } } int main() { ]; int i,j; printf("请输入十个数字:…
每次开始动手写算法,都是先把插入排序,冒泡排序写一遍,十次有九次是重复的,所以这次下定决心,将所有常规的排序算法写了一遍,以便日后熟悉. 以下代码总用一个main函数和一个自定义的CommonFunction函数 CommonFunction函数中定义了一个交换函数和一个输出函数: /* * CommonFunction.h * * Created on: 2015年11月16日 * Author: hoojjack */ #pragma once namespace section4 { vo…
实例说明: 用希尔排序方法对数组进行排序.由于书中更关注的实例,对于原理来说有一定的解释,但是对于第一次接触的人来说可能略微有些简略.自己在草稿纸上画了好久,后来发现网上有好多很漂亮的原理图. 下面将原书中的程序附上(主函数里的程序略有差异) #include <stdio.h> #include <stdlib.h> #define MAX 256 int R[MAX]; void ShellPass(int d, int n) { //希尔排序中的一趟排序,d为当前增量 int…
冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端 维基百科:点击打开链接 /* 用选择法对10个数进行排序 */ #include<stdio.h> void main() { int i,j,a[10]; for(i=0;i<10…
// 冒泡排序 // 选择排序 // 希尔排序 // 快速排序 // 递归排序 // 堆排序 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <sys/timeb.h> #define MAX 40000 long getSystemTime() { struc…