经典算法系列四----冒泡与选择排序
今天就写个排序里比较简单的两种算法:冒泡,选择
思想:
冒泡就是每次循环都两两比较,小的话就交换数据,这样一趟下来,最小的就选了出来,或者说是冒了出来。多次循环后,数组便是有序数组。
选择是从数组中选出一个小的,然后记录下索引,到一次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 }
这个就简单看看就好,没什么难度!