欢迎来到天天文库
浏览记录
ID:50835931
大小:44.50 KB
页数:5页
时间:2020-03-15
《各个排序算法及其代码.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、常见排序算法的实现(一)→插入排序插入排序是最简单最直观的排序算法了,它的依据是:遍历到第N个元素的时候前面的N-1个元素已经是排序好的了,那么就查找前面的N-1个元素把这第N个元素放在合适的位置,如此下去直到遍历完序列的元素为止。 算法的复杂度也是简单的,排序第一个需要1的复杂度,排序第二个需要2的复杂度,因此整个的复杂度就是 1+2+3+……+N=O(N^2)的复杂度。[详细内容]voidinsert_sort(ints[],intn){inti,j,temp;for(i=1;i2、s[i];j=i-1;while(j>=0&&s[j]>temp){s[j+1]=s[j];j--;}s[j+1]=temp;}}常见排序算法的实现(二)→shell排序shell排序是对插入排序的一个改装,它每次排序把序列的元素按照某个增量分成几个子序列,对这几个子序列进行插入排序,然后不断缩小增量扩大每个子序列的元素数量,直到增量为一的时候子序列就和原先的待排列序列一样了,此时只需要做少量的比较和移动就可以完成对序列的排序了。[详细内容]voidshell_sort(ints[],intn){//希尔intd3、=0;inti,j,temp;for(d=n/2;d>=1;d/=2){for(i=d;i=0&&s[j]>temp){s[j+d]=s[j];j=j-d;}s[j+d]=temp;}}}常见排序算法的实现(四)→冒泡排序冒泡排序算法的思想:很简单,每次遍历完序列都把最大(小)的元素放在最前面,然后再对剩下的序列从父前面的一个过程,每次遍历完之后待排序序列就少一个元素,当待排序序列减小为只有一个元素的时候排序就结束了。因此,复杂度在最坏的情况下是O(4、N^2)。voidbubble_sort(ints[],intn){inti,j;inttemp;boolflag;for(i=n-1;i>=1;i--){flag=true;for(j=0;js[j+1]){temp=s[j];s[j]=s[j+1];s[j+1]=temp;flag=false;}}if(flag==true)break;}}常见排序算法的实现(五)→快速排序快速排序的算法思想:选定一个枢纽元素,对待排序序列进行分割,分割之后的序列一个部分小于枢纽元素,一个部分5、大于枢纽元素,再对这两个分割好的子序列进行上述的过程。 //对一个给定范围的子序列选定一个枢纽元素,执行完函数之后返回分割元素所在的位置,//在分割元素之前的元素都小于枢纽元素,在它后面的元素都大于这个元素intpartition(ints[],intlow,inthigh){inttemp;intpivo=s[low];while(low=pivo){high--;}-----à此处可以加if(low6、]=s[low];s[low]=temp;while(low7、的算法思想:把待排序序列分成相同大小的两个部分,依次对这两部分进行归并排序,完毕之后再按照顺序进行合并。voidmerge(ints[],intlow,intm,inthigh){inti,j,k=0;intt[100];for(i=low,j=m+1;i<=m&&j<=high;){if(s[i]<=s[j]){t[k++]=s[i++];}else{t[k++]=s[j++];}}while(i<=m)t[k++]=s[i++];while(j<=high)t[k++]=s[j++];for(i=low,j=8、0;j
2、s[i];j=i-1;while(j>=0&&s[j]>temp){s[j+1]=s[j];j--;}s[j+1]=temp;}}常见排序算法的实现(二)→shell排序shell排序是对插入排序的一个改装,它每次排序把序列的元素按照某个增量分成几个子序列,对这几个子序列进行插入排序,然后不断缩小增量扩大每个子序列的元素数量,直到增量为一的时候子序列就和原先的待排列序列一样了,此时只需要做少量的比较和移动就可以完成对序列的排序了。[详细内容]voidshell_sort(ints[],intn){//希尔intd
3、=0;inti,j,temp;for(d=n/2;d>=1;d/=2){for(i=d;i=0&&s[j]>temp){s[j+d]=s[j];j=j-d;}s[j+d]=temp;}}}常见排序算法的实现(四)→冒泡排序冒泡排序算法的思想:很简单,每次遍历完序列都把最大(小)的元素放在最前面,然后再对剩下的序列从父前面的一个过程,每次遍历完之后待排序序列就少一个元素,当待排序序列减小为只有一个元素的时候排序就结束了。因此,复杂度在最坏的情况下是O(
4、N^2)。voidbubble_sort(ints[],intn){inti,j;inttemp;boolflag;for(i=n-1;i>=1;i--){flag=true;for(j=0;js[j+1]){temp=s[j];s[j]=s[j+1];s[j+1]=temp;flag=false;}}if(flag==true)break;}}常见排序算法的实现(五)→快速排序快速排序的算法思想:选定一个枢纽元素,对待排序序列进行分割,分割之后的序列一个部分小于枢纽元素,一个部分
5、大于枢纽元素,再对这两个分割好的子序列进行上述的过程。 //对一个给定范围的子序列选定一个枢纽元素,执行完函数之后返回分割元素所在的位置,//在分割元素之前的元素都小于枢纽元素,在它后面的元素都大于这个元素intpartition(ints[],intlow,inthigh){inttemp;intpivo=s[low];while(low=pivo){high--;}-----à此处可以加if(low6、]=s[low];s[low]=temp;while(low7、的算法思想:把待排序序列分成相同大小的两个部分,依次对这两部分进行归并排序,完毕之后再按照顺序进行合并。voidmerge(ints[],intlow,intm,inthigh){inti,j,k=0;intt[100];for(i=low,j=m+1;i<=m&&j<=high;){if(s[i]<=s[j]){t[k++]=s[i++];}else{t[k++]=s[j++];}}while(i<=m)t[k++]=s[i++];while(j<=high)t[k++]=s[j++];for(i=low,j=8、0;j
6、]=s[low];s[low]=temp;while(low7、的算法思想:把待排序序列分成相同大小的两个部分,依次对这两部分进行归并排序,完毕之后再按照顺序进行合并。voidmerge(ints[],intlow,intm,inthigh){inti,j,k=0;intt[100];for(i=low,j=m+1;i<=m&&j<=high;){if(s[i]<=s[j]){t[k++]=s[i++];}else{t[k++]=s[j++];}}while(i<=m)t[k++]=s[i++];while(j<=high)t[k++]=s[j++];for(i=low,j=8、0;j
7、的算法思想:把待排序序列分成相同大小的两个部分,依次对这两部分进行归并排序,完毕之后再按照顺序进行合并。voidmerge(ints[],intlow,intm,inthigh){inti,j,k=0;intt[100];for(i=low,j=m+1;i<=m&&j<=high;){if(s[i]<=s[j]){t[k++]=s[i++];}else{t[k++]=s[j++];}}while(i<=m)t[k++]=s[i++];while(j<=high)t[k++]=s[j++];for(i=low,j=
8、0;j
此文档下载收益归作者所有