- 浏览: 71017 次
- 性别:
- 来自: 大连
最近访客 更多访客>>
最新评论
-
newlangwen1:
你好 我想请教个问题,我运行了一下上面的程序,结果是输入什么就 ...
C程序 对文本行进行排序
希尔排序(Shell Sort)是插入排序的一种。是针对直接插入排序算法的改进。该方法又称缩小增量排序,
希尔排序基本思想:
先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。
shellsort函数:按递增顺序对v[0]...v[n-1]进行排序
void shellsort(int v[], int n) /* shellsort: sort v[0]...v[n-1] into increasing order */ void shellsort(int v[], int n) { int gap, i, j, temp; for (gap = n/2; gap > 0; gap /= 2) for (i = gap; i < n; i++) for (j=i-gap; j>=0 && v[j]>v[j+gap]; j-=gap) { temp = v[j]; v[j] = v[j+gap]; v[j+gap] = temp; } }
插入排序算法思路:
假定这个数组的序是排好的,然后从头往后,如果有数比当前外层元素的值大,则将这个数的位置往后挪,直到当前外层元素的值大于或等于它前面的位置为止.这具算法在排完前k个数之后,可以保证a[1…k]是局部有序的,保证了插入过程的正确性.
算法描述:
一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:
1. 从第一个元素开始,该元素可以认为已经被排序
2. 取出下一个元素,在已经排序的元素序列中从后向前扫描
3. 如果该元素(已排序)大于新元素,将该元素移到下一位置
4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
5. 将新元素插入到该位置中
6. 重复步骤2
(如果比较操作的代价比交换操作大的话,可以采用二分查找法来减少比较操作的数目。该算法可以认为是插入排序的一个变种,称为二分查找排序。)
void insertSort(char array[], int n) { int i,j; int temp; for(i=0;i<n;i++) { temp=array[i]; for(j=i; j>0 && temp<array[j-1];j--) array[j]=array[j-1]; array[j]=temp; } }
发表评论
-
C程序 声明与定义的区别
2010-07-30 15:34 1310http://zhidao.baidu.com/questio ... -
C语言 函数指针 与 指针函数
2010-07-30 10:27 919指针函数是返回指针的函数,即本质是一个函数。函数返回类型是某一 ... -
C程序 命令行参数
2010-07-30 09:34 680echo.cpp #include <stdi ... -
C程序 整型数按位取反 输出结果
2010-07-29 15:16 1326#include <stdio.h> int m ... -
C程序 对文本行进行排序
2010-07-26 09:30 999#include <stdio.h> #incl ... -
C语言:malloc()函数与alloc()函数
2010-07-24 10:02 917C语言跟内存分配方式 ... -
C程序设计语言(第二版) 5-4 strend(s,t)
2010-07-23 16:29 1471strend(s,t) 如果字符串t出现在字符串s的尾部,该函 ... -
C程序设计语言(第二版) 5-3 编写strcat()
2010-07-23 16:02 805#include<stdio.h> void ... -
C程序 关于字符串的问题
2010-07-23 15:47 684#include<stdio.h> void ... -
C程序设计语言(第二版)5-2
2010-07-22 17:13 681#include <ctype.h> #incl ... -
C程序设计语言(第二版) 4-14
2010-07-22 11:47 862定义宏swap(t, x, y)以交换t类型的两个参数 ... -
C程序设计语言(第二版) 4-13 递归版本reverse()将字符串倒置输出
2010-07-22 11:18 1003编写一个递归版本的reverse()函数,将字符串倒置 ... -
C程序设计语言(第二版) 4-12
2010-07-22 10:29 1030运用printd函数的设计思想编写一个递归版本的itoa函数, ... -
C程序 递归小例子 快速排序
2010-07-22 09:26 925从执行速度来讲,下列版本的快速排序可能不是最快的,但是它是最简 ... -
C程序 递归实现将数字作为字符串输出
2010-07-21 15:47 1274将一个数字作为字符串打印的情况,数字是反序生成的:低位数字先于 ... -
C语言学习之变量存储
2010-07-21 15:14 873http://zhidao.baidu.com/questio ... -
C语言外部变量的使用以及extern的用法
2010-07-21 15:11 2207http://hi.baidu.com/%C3%E2%B7%D ... -
C语言 全局变量和局部变量
2010-07-21 15:07 1432http://hi.baidu.com/%C3%E2%B7%D ... -
C语言 extern
2010-07-21 11:20 1103在头文件中声明函数时,前面的extern可有可无,只要这些函数 ... -
C程序设计语言(第二版) 4-8 最多只压回 一个字符
2010-07-20 18:47 765#include <stdio.h> i ...
相关推荐
合并排序,插入排序,希尔排序,快速排序,冒泡排序,桶排序的C语言实现,原创。
基本思想 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。...然后,取第二个增量d2重复上述的分组和排序,直至所取的增量dt=1(dt…),即所有记录放在同一组中进行直接插入排序为止。
常见经典排序算法(C语言)1希尔排序 二分插入法 直接插入法 带哨兵的直接排序法 冒泡排序 选择排序 快速排序 堆排序.docx
希尔排序,直接插入排序,折半插入排序算法的实现,c语言实现希尔排序
C语言所有排序大全,解决了您日常上课考试学习的需要,在这里每一个程序都没有错误,其中压缩包包括了归并排序;基数排序;快速排序;冒泡排序;...希尔排序这些日常排序,因为是全集所以大家踊跃下载
希尔排序(Shell Sort)是插入排序的一种,也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。 希尔排序的基本思想是:先将整个待排序的记录序列分割成为若干子序列(由相隔...
快速排序 C语言实现 快速排序 C语言实现 快速排序 C语言实现
希尔排序(Shell Sort)是插入排序的一种更高效的改进版本,也称为“缩小增量排序”。它的基本思想是:先将整个待排序的记录序列分割成若干个子序列分别进行直接插入排序,待整个序列中的记录"基本有序"时,再对全体...
直接排序法,折半插入法,希尔排序法,快速排序法(c语言实现),适合初学数据结构的同学。全部程序都在VC++6.0调试通过。
1) 至少采用三种方法实现上述问题求解(提示,可采用的方法有插入排序、希尔排序、起泡排序、快速排序、选择排序、堆排序、归并排序)。并把排序后的结果保存在不同的文件中。 2) 统计每一种排序方法的性能(以上机...
直接插入排序 选择排序 堆排序 归并排序 快速排序 冒泡排序等七种排序方法
直接插入、折半插入、冒泡、快速、简单选择等排序方法 用c语言实现 代码运行正常 不会有任何的问题
主要介绍了希尔排序算法的C语言实现示例,希尔排序可以看作为一种高级的插入排序,需要的朋友可以参考下
演示了直接插入排序和shell排序,多种软件可执行。采用了基础语言c语言。
直接插入排序 直接插入排序(Straight Insertion Sort)是一种简单且古老的排序算法,其基本思想是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。12 直接插入排序的算法过程如下...
直接插入排序 希尔排序 冒泡排序 快速排序
利用C语言实现拥有冒泡排序、选择排序、希尔排序、堆排序、快速排序、直接插入排序
在这份文档中,我用C语言实现了排序算法的多种方法,包括插入排序、选择排序、冒泡排序、希尔排序、归并排序、快速排序、桶排序和基数排序。这些算法可以帮助我们对数据进行有效的排序和整理,以便更好地处理和分析...
c语言经典排序算法 常见经典排序算法 1.希尔排序 2.二分插入法 3.直接插入法 4.带哨兵的直接排序法 5.冒泡排序 6.选择排序 7.快速排序 8.堆排序