- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
C
C语言常见算法实现
1、归并排序算法:
归并排序的算法思想:把待排序序列分成相同大小的两个部分,依次对这两部分进行归并排序,完毕之后再按照顺序进行合并。
//归并排序中的合并算法
voidMerge(intarray[],intstart,intmid,intend)
{
inttemp1[10],temp2[10];intn1,n2;
n1=mid-start+1;n2=end-mid;
//拷贝前半部分数组
for(inti=0;in1;i++)
{
temp1[i]=array[start+i];
}
//拷贝后半部分数组
for(inti=0;in2;i++)
{
temp2[i]=array[mid+i+1];
}
//把后面的元素设置的很大
temp1[n1]=temp2[n2]=1000;
//逐个扫描两部分数组然后放到相应的位置去
for(intk=start,i=0,j=0;k=end;k++)
{
if(temp1[i]=temp2[j])
{
}
else
{
}
}
}
array[k]=temp1[i];i++;
array[k]=temp2[j];j++;
//归并排序
voidMergeSort(intarray[],intstart,intend)
{
if(startend)
{inti;
{
inti;
i=(end+start)/2;
//对前半部分进行排序
MergeSort(array,start,i);
//对后半部分进行排序
MergeSort(array,i+1,end);
//合并前后两部分
Merge(array,start,i,end);
}
}
2、快速排序算法
2、快速排序算法
快速排序的算法思想:选定一个枢纽元素,对待排序序列进行分割,分割之后的序列一个部分小于枢纽元素,一个部分大于枢纽元素,再对这两个分割好的子序列进行上述的过程。
//对一个给定范围的子序列选定一个枢纽元素,执行完函数之后返回分割元素所在的位置,
//在分割元素之前的元素都小于枢纽元素,在它后面的元素都大于这个元素
intPartition(intarray[],intlow,inthigh)
{
//采用子序列的第一个元素为枢纽元素
intpivot=array[low];
while(lowhigh)
{
//从后往前在后半部分中寻找第一个小于枢纽元素的元素
while(lowhigharray[high]=pivot)
{
--high;
}
//将这个比枢纽元素小的元素交换到前半部分
Swap(array[low],array[high]);
//从前往后在前半部分中寻找第一个大于枢纽元素的元素
while(lowhigharray[low]=pivot)
{
++low;
}
//将这个比枢纽元素大的元素交换到后半部分
Swap(array[low],array[high]);
}
3、冒泡排序:冒泡排序算法的思想:很简单,每次遍历完序列都把最大(小)的元素放在最前面,然
3、冒泡排序:
冒泡排序算法的思想:很简单,每次遍历完序列都把最大(小)的元素放在最前面,然后再对剩下的序列从父前面的一个过程,每次遍历完之后待排序序列就少一个元素,当待排序序列减小为只有一个元素的时候排序就结束了。因此,复杂度在最坏的情况下是O(N^2)。
void Swap(int
{
*a, int
*b)
//void
{
冒泡排序
BubbleSort(int
array[], int
length)
// 记录一次遍历中是否有元素的交换
bool exchange;
for
{
(int
i =
0;i
length; ++i)
exchange = false;
for
{
(int
j
=
i
+
1;j
length;
++j)
if (array[j] array[i])
{
exchange =
Swap(array[j],
true;
array[i]);
//返回枢纽元素所在的位置
returnlow;
}
//快速排序
voidQuickSort(intarray[],intlow,inthigh)
{
if(lowhigh)
{
intn=Partition(array,low,high);QuickSort
文档评论(0)