黑马程序员--c语言-排序

来源:互联网 发布:紫色水离子淘宝店 编辑:程序博客网 时间:2024/06/11 19:36

------<a href="http://write.blog.csdn.net/postedit" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

                                             第四讲--排序思想

01-选择排序
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
 
2、演示与分析
如果存储的数据为:12,3,40,25,7
如果需要排序,根据选择排序的思想分为下面几步
1)找到最小的3放到第0个位置
3,12,40,25,7
2)从第1个元素开始,继续找最小的元素,放到第1个位置
3,7,40,25,12
3)从第2个元素的位置开始,找最小的,放到位置2处
3,7,25,40,12
3,7,12,40,25
4)最后找剩下的两个元素

3,7,12,25,40
 
3、代码实现
void fun(int a[])

{

    int i,j;

    for(i=0;i<5;i++)

      for(j=i+1;j<5;j++)

      if(a[i]>a[j])

       a[i]=a[j]

} //伪代码,具体代码楼主就不敲了
 


 
02-二分法查找(折半查找)
 
1、二分法查找
在计算机科学中,二分查找,也称折半查找算法、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。
 
2、演示与分析
假定有一个数组:1,3,4,6,7,9,10
想要查找9是否在该数组中,二分的思想可以书写成:
1)第一步找到数组中间的6,发现9>6因此在6,7,9,10中继续查找
2)第二步找中间的7,发现9>7,因此在7,9,10中找
3)第三步找中间的9,发现9==9,得到结果,结束查找
 
3、代码实现
代码的实现需要找寻数组的中间位置,因此,考虑两个变量,一个是 low,一个是 high,表示两头的索引。那么中间元素的索引可以表示为 mid = (low + high) / 2
 
二分查找,如果等到 low == high 的时候,还没有找到的话,就表示没有找到数据,应该返回 -1
 
整个过程是一个循环:
Low = 0;
High = 数组长度 - 1;
While (low <= high) {
mid = (low + high) / 2
if(key == arr[mid]) {
找到结果;
break;
} else if( key > arr[mid]) {
low = mid;
} else {
high = mid;
}
}
 
 
变体:如果没有找到,就在合适的位置插入该数据
 

 
03-冒泡排序
 
1、假定数组为 :5,2,3,1,4

2、冒泡排序思想,相邻的两个数进行排序,第一次循环就是 2,5,3,1,4

1、第二次循环就是,2,3,5,1,4

1、第三次循环就是  :2,3,1,5,4

1、第四次循环就是:2,3,1,4,5

1、第五次循环就是:2,3,1,4,5

1、第六次循环就是:2,1,3,4,5

1、第7次循环就是:2,1,3,4,5

1、第8次循环就是:2,1,3,4,5

1、第9次循环就是:1,2,3,4,5


 
如上规律就出来了:

伪代码如下:

void fun(int a[],int b)

{

      int i,j;

     for(i=0;i<b-1;i++)

       for(j=0;j<b-1-i;i++)

       if(a[i]>a[i+1])

      {

        a[i+1]=a[i];

        }

}

 

 

 

 

0 0