十大常规排序算法Ⅰ
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了十大常规排序算法Ⅰ,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2193字,纯文字阅读大概需要4分钟。
内容图文
void?Swap(int?*a,int?*b) //交换两个数
{
????int?temp?=?*a;
????*a=*b;
????*b=temp;
}
1、冒泡排序
描述:
①比较相邻的原始,如果第一个比第二个大就交换两个数。
②从第一对到结尾的最后一对执行①的操作,这样最后的元素已经排序成功。
③在剩下序列中,对所有元素重复①②的操作,
④以此执行①②③直到剩下的序列元素为0
复杂程度:
时间复杂度O(n^2) 空间复杂度O(1)
//参数:指针 数组大小 返回大小
//返回:指针
//数组 冒泡排序(数组,数组大小,返回大小)
int*?Bubblesort(int*?nums,?int?numsSize,?int*?returnSize){
????*returnSize?=?numsSize;
????if(numsSize?==?0?||?numsSize?==?1)
????{
????????return?nums;
????}
????for(int?i=0;i<numsSize;i++){
????????for(int?j=1;j<numsSize-i;j++)
????????{
????????????if(nums[j-1]>nums[j]){
????????????????Swap(&nums[j],&nums[j-1]); //交换数据
????????????}
????????}
????}
????return?nums;
}
2、选择排序
描述:
①初始状态:有序区为空,无序区为0-[n-1]。
②从无序区0-[n-1]中找到最小元素的位置i,交换[i]区和无序区的首区。此时:有序区为[0],无序区为1-[n-1]
③重复执行②n-1次以后,数组就有序化了
复杂程度:
时间复杂度O(n^2) 空间复杂度O(1)
int*?Selectionsort(int*?nums,?int?numsSize,?int*?returnSize){
????*returnSize?=?numsSize;
????if(numsSize?==?0?||?numsSize?==?1)
????{
????????return?nums;
????}
????for(int?i=0;i<numsSize;i++){
????????int?Min=i;
????????for(int?j=i;j<numsSize;j++)
????????{
????????????if(nums[j]<nums[Min]){
????????????????Min=j;
????????????}
????????}
????????Swap(&nums[i],&nums[Min]);
????}
????return?nums;
}
3、插入排序
描述:
①初始状态:有序区为0,无序区为1-[n-1]。
②取下无序区首元素,在已经排列好的元素序列中从后往前扫描
③如果该元素(已排列)大于新元素,将该元素后移。
④重复执行③操作,直到找到一个小于或等于新元素的位置
⑤将新元素插入该位置。
⑥重复执行②~⑤,直到无序区为空
时间复杂度O(n^2) 空间复杂度O(1)
void InsertSort(int *arry,int numsSize)
{
????*returnSize?=?numsSize;
????if(numsSize?==?0?||?numsSize?==?1)
????{
????????return?nums;
????}
????for(int?i=1;i<numsSize;i++){
????????int?key=nums[i],count=i; //保存新数据
????????while(count?>0?&&?nums[count-1]>key)
????????{
????????????nums[count]=nums[count-1]; //老数据后移
????????????count--;
????????}
????????nums[count]?=?key; //新数据位置赋值
????}
????return?nums;
}
内容总结
以上是互联网集市为您收集整理的十大常规排序算法Ⅰ全部内容,希望文章能够帮你解决十大常规排序算法Ⅰ所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。