资源简介

源码包括:冒泡排序、选择排序、插入排序、希尔排序、堆排序、归并排序、快速排序、计数排序、基数排序等,没有实现桶排序。 每一种排序算法在我的博客中都有对应的讲解.

资源截图

代码片段和文件信息

/*******************************
   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个文件信息

评论

共有 条评论