wordpress声明插件深圳营销型网站seo
web/
2025/9/26 17:31:32/
文章来源:
wordpress声明插件,深圳营销型网站seo,黄页群发软件,qq官方网站登录入口前言#xff1a; 准备笔试题中#xff0c;这几天复习排序算法#xff0c;尽量一天学一两个#xff0c;并且以能手写代码的理解方式写出来。
冒泡排序#xff1a;
思路#xff1a;
首先#xff0c;一定要先有一个场景#xff0c;比如 1 3 9 5 4
现在想象它#xff…前言 准备笔试题中这几天复习排序算法尽量一天学一两个并且以能手写代码的理解方式写出来。
冒泡排序
思路
首先一定要先有一个场景比如 1 3 9 5 4
现在想象它从左到右进行一次注意是一次两个两个比较小的左边大的右边
如1和3比3和9比9和5比交换9和4比交换
结果是1 3 5 4 9
一次
for(j0;jlen-1;j){if(A[j]A[j1]){tem A[j];A[j] A[j1];A[j1] tem;}
}
的结果就是这样len是5嘛由于是从0开始所以截至是4,由是当前和下一个比较的所以j4 j最多到3j1等于4刚好就是访问到数组的最后一个
这个明白了之后我们再观察1 3 9 5 4 ----1 3 5 4 9
发现9到了最高的地方实际就是它每一轮的效果就是最大的那个会往上冒
例如现在是1 3 5 4 9 下一次必然5就会再倒数第二大的位置x x x 5 9
再下一次就是x x 4 5 9
再下一次就是x 3 4 5 9
从这里可以看出其实第一轮交换完之后就可以不用去比较次高位和9了第二轮之后就不用比较次次高位和5了以此类推仔细看下面的for(j0;jlen-1;j)就优化了
因此呢有5个元素最多需要4轮上面的for循环就能完成排序也就是0~len-1所以完整的算法就是:
void bubble_sort(int *A,int len){int i,j,tem;for(i0;ilen-1;i)for(j0;jlen-1-i;j){if(A[j]A[j1]){tem A[j];A[j] A[j1];A[j1] tem;}}
}
所以总结冒泡排序的思想就是 每一轮都将 有且只有一个那个最大的数冒泡到右边去
按照这个思路我们就能明白每一行代码每一个变量为啥这么写了。
交换排序
思路首先呢还是要有一个情景比如 1 3 9 5 4
定一个min变量来标记最小的值并且min会再每轮开始之前被赋值为i比如第一轮也就是说i代表的就是数组的第一个空位A[0]如果是第二轮那i代表的就是数组的第二个空位A[1]每一轮我们都要从整个数组中找出一个最小的来放到左边
好现在开始想象第一轮注意是第1轮只进行一次
现在min 0,开始比较A[min]与3比较
1比3小1比9小1比5小1比4小好的min 0也就是数字1获得了A[0]这个空位
再来第二轮
这个时候min 1开始比较A[min]与9比较
3比9小3比5小3比4小好的min 1也就是数字3得到了A[1]这个空位
再来第三轮
这个时候min 2开始比较A[min]与5比较
9比5大min记为5的下标5比4大min记为4的下标
也就是说最终min 4的下标也就是数组4得到了A[2]这个空位
用代码写就是这样
void swap_sort(int *A,int len){int i,j,min; for(i0;ilen;i){min i;for(ji;jlen-1;j){if(A[min]A[j]) {min j;} //找出这一轮里最小的那个数的角标}if(min!i){//交换~tem A[i];A[i] A[min];A[min] tem;}}}
这两个排序算是简单的后面等我复习了其他的再写吧~
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/81453.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!