资源简介
源码包括:冒泡排序、选择排序、插入排序、希尔排序、堆排序、归并排序、快速排序、计数排序、基数排序等,没有实现桶排序。
每一种排序算法在我的博客中都有对应的讲解.
代码片段和文件信息
/*******************************
shell排序
Author:兰亭风雨 Date:2014-02-25
Email:zyb_maodun@163.com
********************************/
#include
#include
/*
第一种形式的代码
对长为len的数组进行一趟增量为ader的插入排序
本算法在插入排序算法的第一种实现形式上进行修改得到
*/
void Shell_Insert1(int *arrint lenint ader)
{
int ik;
//循环对ader个子序列进行插入排序操作
for(k=0;k for(i=ader+k;i { //将第i个元素分别与前面的每隔ader个位置的元素比较,插入适当的位置
if(arr[i] { //一直向左进行比较,直到插入到适当的位置
int key = arr[i];
int count = 0; //用来记录key在与前面元素比较时向左移动了几个ader长度
while(i>k && key {
arr[i] = arr[i-ader];
arr[i-ader] = key;
i -= ader;
count++;
}
//将待插入的数定位到下一个元素,执行下一次插入排序
//因为后面还要执行i+=ader,所以这里回到原位置即可
i += count*ader;
}
}
}
/*
第二种形式的代码
对长为len的数组进行一趟增量为ader的插入排序
本算法在插入排序算法的第二种实现形式上进行修改得到
*/
void Shell_Insert2(int *arrint lenint ader)
{
int ijk;
//循环对ader个子序列各自进行插入排序
for(k=0;k for(i=ader+k;i if(arr[i] < arr[i-ader])
{
int key = arr[i];
for(j=i-ader;j>=k && arr[j]>key;j-=ader)
arr[j+ader] = arr[j];
arr[j+ader] = key;
}
}
/*
在第二种代码的形式上继续精简代码
交叉进行各个子序列的插入排序
*/
void Shell_Insert2_1(int *arrint lenint ader)
{
int ij;
//对ader子序列交叉进行插入排序
for(i=ader;i if(arr[i] < arr[i-ader])
{
int key = arr[i];
for(j=i-ader;j>=0 && arr[j]>key;j-=ader)
arr[j+ader] = arr[j];
arr[j+ader] = key;
}
}
/*
第三种形式的代码
对长为len的数组进行一趟增量为ader的插入排序
本算法在插入排序算法的第三种实现形式上进行修改得到
*/
void Shell_Insert3(int *arrint lenint ader)
{
int ijk;
//循环对ader个子序列各自进行插入排序
for(k=0;k for(i=ader+k;i for(j=i-ader;j>=k && arr[j]>arr[j+ader];j-=ader)
{
//交换元素数值
arr[j]^=arr[j+ader];
arr[j+ader]^=arr[j];
arr[j]^=arr[j+ader];
}
}
/*
在第三种代码的形式上继续精简代码
交叉进行各个子序列的插入排序
*/
void Shell_Insert3_1(int *arrint lenint ader)
{
int ij;
//交叉对ader个子序列进行插入排序
for(i=ader;i for(j=i-ader;j>=0 && arr[j]>arr[j+ader];j-=ader)
{
//交换元素数值
//由于arr[j]不等于arr[j+1],
//因此可以安全地用该交换方法
arr[j]^=arr[j+ader];
arr[j+ader]^=arr[j];
arr[j]^=arr[j+ader];
}
}
/*
shell排序后的顺序为从小到大
arr为要排序的数组,长为len,
add为增量数组,长为num
*/
void Shell_Sort(int *arrint lenint *addint num)
{
int i;
//共进行nun趟不同增量的插入排序
for(i=0;i Shell_Insert2_1(arr lenadd[i]); //一趟增量为add[i]的插入排序
}
int main()
{
int len;
printf(“请输入排序的元素的个数:“);
scanf(“%d“&len);
int i;
int add[] = {321}; //增量数组
int *arr = (int *)malloc(len*sizeof(int));
printf(“请依次输入这%d个元素(必须为整数):“len);
for(i=0;i scanf(“%d“arr+i);
printf(“shell排序后的顺序:“);
Shell_Sort(arrlenadd3);
for(i=0;i printf(“%d “arr[i]);
printf(“\n“);
free(arr);
arr = 0;
return 0;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 184387 2014-02-27 12:05 各种排序\shell排序\Debug\shell排序.exe
文件 206764 2014-02-27 12:05 各种排序\shell排序\Debug\shell排序.ilk
文件 8370 2014-02-27 12:05 各种排序\shell排序\Debug\shell排序.obj
文件 220140 2014-02-27 10:32 各种排序\shell排序\Debug\shell排序.pch
文件 443392 2014-02-27 12:05 各种排序\shell排序\Debug\shell排序.pdb
文件 41984 2014-02-27 12:05 各种排序\shell排序\Debug\vc60.idb
文件 45056 2014-02-27 12:05 各种排序\shell排序\Debug\vc60.pdb
文件 3415 2014-02-27 12:06 各种排序\shell排序\shell排序.cpp
文件 3439 2014-02-25 15:53 各种排序\shell排序\shell排序.dsp
文件 526 2014-02-25 16:17 各种排序\shell排序\shell排序.dsw
文件 41984 2014-02-27 12:06 各种排序\shell排序\shell排序.ncb
文件 48640 2014-02-27 12:06 各种排序\shell排序\shell排序.opt
文件 1156 2014-02-27 12:05 各种排序\shell排序\shell排序.plg
文件 816 2014-02-26 12:35 各种排序\冒泡排序\原始冒泡排序\BubbleSort.cpp
文件 3449 2014-02-26 12:35 各种排序\冒泡排序\原始冒泡排序\BubbleSort.dsp
文件 528 2014-02-26 12:35 各种排序\冒泡排序\原始冒泡排序\BubbleSort.dsw
文件 33792 2014-02-26 12:35 各种排序\冒泡排序\原始冒泡排序\BubbleSort.ncb
文件 48640 2014-02-26 12:35 各种排序\冒泡排序\原始冒泡排序\BubbleSort.opt
文件 766 2014-02-26 12:35 各种排序\冒泡排序\原始冒泡排序\BubbleSort.plg
文件 184400 2014-02-26 12:35 各种排序\冒泡排序\原始冒泡排序\Debug\BubbleSort.exe
文件 181776 2014-02-26 12:35 各种排序\冒泡排序\原始冒泡排序\Debug\BubbleSort.ilk
文件 4203 2014-02-26 12:35 各种排序\冒泡排序\原始冒泡排序\Debug\BubbleSort.obj
文件 220140 2014-02-26 12:35 各种排序\冒泡排序\原始冒泡排序\Debug\BubbleSort.pch
文件 361472 2014-02-26 12:35 各种排序\冒泡排序\原始冒泡排序\Debug\BubbleSort.pdb
文件 33792 2014-02-26 12:35 各种排序\冒泡排序\原始冒泡排序\Debug\vc60.idb
文件 45056 2014-02-26 12:35 各种排序\冒泡排序\原始冒泡排序\Debug\vc60.pdb
文件 184407 2014-02-26 12:47 各种排序\冒泡排序\改进冒泡排序\Debug\UpdatedBubbleSort.exe
文件 182996 2014-02-26 12:47 各种排序\冒泡排序\改进冒泡排序\Debug\UpdatedBubbleSort.ilk
文件 4306 2014-02-26 12:47 各种排序\冒泡排序\改进冒泡排序\Debug\UpdatedBubbleSort.obj
文件 220140 2014-02-26 12:40 各种排序\冒泡排序\改进冒泡排序\Debug\UpdatedBubbleSort.pch
............此处省略128个文件信息
- 上一篇:模式匹配—BF算法和KMP算法
- 下一篇:2019超级轨迹赛任务块.cdr
相关资源
- verilog冒泡排序算法
- 三十种排序算法的可视化
- CSP-J、CSP-S初赛知识点2_线性表、查找
- 商品排序算法研究
- 各种排序算法时间性能的比较
- 排序算法动态图解!一看就懂
- 数据结构课程设计报告之排序算法.
- 数据结构课程设计-内部排序算法的性
- 数据结构课程设计内部排序算法比较
- 数据结构综合课设排序算法时间.doc
- 数据结构实验报告11-内部排序-三种平
- 论文研究-频域盲源分离的邻频幅角比
- 数据结构实验七排序算法的实现题目
- 各排序算法比较课程设计报告
- 用flash制作的常见的排序算法的演子
- camera calibrate点集排序算法
- NSGA-II非支配排序算法
- 数据结构实验报告排序算法
- 数据结构排序算法演示系统
- 排序算法基础、改进综合
- 7大排序算法实现程序快速排序,冒泡
- 各种排序算法时间性能的比较.doc
- 6种排序算法的排序系统
- 广东工业大学_数据结构内部排序算法
- 归并分类快速排序算法。
- 一个数据结构的内部排序加一个贪吃
- 直接插入排序/快速排序/选择排序/冒
- 普通快速排序随机快速排序算法实验
- 六种内部排序算法比较:直接插入排
- 内部排序算法比较
评论
共有 条评论