常见排序算法.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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)

hao187 + 关注
官方认证
文档贡献者

该用户很懒,什么也没介绍

认证主体武汉豪锦宏商务信息咨询服务有限公司
IP属地上海
统一社会信用代码/组织机构代码
91420100MA4F3KHG8Q

1亿VIP精品文档

相关文档