经典算法系列四----冒泡与选择排序

今天就写个排序里比较简单的两种算法:冒泡,选择

思想:

冒泡就是每次循环都两两比较,小的话就交换数据,这样一趟下来,最小的就选了出来,或者说是冒了出来。多次循环后,数组便是有序数组。

选择是从数组中选出一个小的,然后记录下索引,到一次for循环后对比,判断是否需要交换数据,多次循环后,数组就是有序数组。

这两个算法比较简单,但是也很经典,所以在这就记录下一篇。对于他们的时间复杂度,在很多排序中算是较差的,但是基础思想还是有学习的地方的,而且这两个都是不稳定排序。下面直接上代码,只做简单参照:

 1 /*
 2 *冒泡。选择排序
 3 *丁洋 
 4 */
 5 #include<stdio.h>
 6 #include<stdlib.h>
 7 /*
 8 *交换 
 9 */
10 void swap(int *i,int *j) 
11 {
12      *i = *i ^ *j;
13      *j = *i ^ *j;
14      *i = *i ^ *j; 
15 }
16 /*
17 *冒泡法 
18 */
19 void maop(int a[],int n)
20 {
21      int i,j;
22      char flag = 1;/*设置提前跳出的标志*/
23      for(i=0;i<n-1;i++)
24      {
25          flag = 1;
26          for(j=0;j<n-1-i;j++)
27          {
28              if(a[j] > a[j+1])
29              {
30                   swap(&a[j],&a[j+1]);
31                   flag = 0;        
32              }                    
33          }
34          if(flag)
35          break;                
36      }     
37 }
38 
39 /*
40 *选择法 
41 */
42 void select(int a[],int n)
43 {
44     int i,j,k;
45     for(i=0;i<n;i++)
46     {
47        k = i;
48        for(j=i+1;j<n;j++)
49        {
50            if(a[k] > a[j])
51            k = j;                  
52        }
53        if(k != i)
54             swap(&a[k],&a[i]);                  
55     }     
56 }

这个就简单看看就好,没什么难度!

原文地址:https://www.cnblogs.com/my-life/p/3491247.html