排序问题(不断总结,不断更新)
2013-06-13 15:39
288 查看
排序问题
冒泡排序:
冒泡排序的思想:每次将相邻的两个数比较,将小的放到前面(或大的放到前面)。若有6个数,9,8,5,4,2,0。第一次,9,8比较,将9,8对调;第二次,将第二个数与第三个数比较即9,5比较,将9,5对调;第三次,将9,4比较······(如下图所示)
所以循环只需要控制循环几次,和每一次循环交换的次数就行了。
循环的次数是n-1次,然后每次循环的次数就是n-i次,然后排列就行。
冒泡的思路就是:起泡或者说是沉底的思想。沉底就是每一次循环都将最大或者最小的数放到最下面,不断循环,直到结束。
代码:
for(i = 0 ; i < n-1; i ++)
for(j = 0;j < n-i;j++)
{
if(a[j]>a[j+1]) //将最大的数字沉底,按照从小到大的顺序排列。
swap(a[j],a[j+1]);
}
选择排序
选择排序的思想:所谓选择法就是将n个数中的最小数与a[0]对换;再将a[1]~a
中的,最小数与a[1]对换,依次往下循环,……每比较一轮,找出未经排序的最小的一个数。共比较N-1轮。
以5个数为例,说明一下:
a[0] a[1] a[2] a[3] a[4]
3 6 1 9 4 未排序时的情况
1 6 3 9 4 将余下的4个数中最小的数3与a[1]交换
1 3 6 9 4 将余下的3个数中最小的数4与a[2]交换
1 3 4 9 6 将余下的2个数中的最小数6与a[3]交换
1 3 4 6 9 至此完成排序
void sort(int array[],int n)
{
int i,j,k;
for(i = 0;i < n-1; i ++) //比较n-1次
{
k = i;
for(j = i+1; j < n; j ++) //从第i+1个数字开始往下比较
{
if(array[j]<array[j+1])
k=j;
swap(a[k],a[i]);
}
}
}
相关文章推荐
- 关于Javascript与表单结合时出现"对象不支持此属性或方法"的问题总结(不断更新中...)
- C++面试常见问题总结(不断更新中......)
- 关于eclipse启动问题总结(不断更新)
- React Native 使用问题总结(不断更新中)
- MATLAB 常用问题总结(不断更新中)
- J2SE中的一些基础问题总结(不断更新)
- Genymotion+VitualBox安装问题解决(个人版+不断总结更新)
- appium遇到问题总结(不断更新)
- Latex常见问题总结(不断更新中)
- Android开发遇到的问题和小知识总结(不断更新中)
- CCS3.1调试问题总结(不断更新)37256107249
- MVC问题小总结,不断更新中...
- MVC问题小总结,不断更新中...
- c++排序方法总结(持续更新)
- 前端笔试题--不断更新(答案来源网络,若有问题请指正)
- Quartus/Nios II常见问题集锦-不断更新中
- android 相关知识总结(不断更新中....)
- 每日学习总结:DataTable按某一列数值大小排序问题、GridView后台动态绑定、页面导航方法总结
- jquery问题总结(更新中)
- MFC开发常见问题汇总(不断更新)