基于排序的方法求一组数的中位数
这个例题写上两种方法。其实既然是基于排序的,那么方法的不同,区别就在采用的排序方法的不同。
自己想到的是冒泡排序(你说说你们,学了这么久的数据结构,连个冒泡排序都不会写,读什么书?--刘振宇),书上提供给的是选择排序。
自己想到的办法(冒泡排序)
冒泡排序的思想
冒泡排序是一种比较简单的排序方法,它的基本思路是:重复的走访要排序的数列,一次比较相邻的两个元素,如果他们顺序错误就把他们交换过来,直到没有在需要交换的,整个数列排序完成。
由于每次循环,最大(或最小)的一个元素都会到数列的最末端,所以称之为冒泡排序。
基本运作方式
这里以每次都挑出最大的那个元素为例:
1. 比较相邻的元素。如果第一个比第二个答,就交换他们
2. 对每一对相邻的元素做相同的工作,从开始第一对到结束的最后一对。(在这一点,最后的元素应该会是最大的数)
3. 针对所有的元素重复以上的步骤,除了每次参与循环的最后一个(比如说,第一次循环就是以最后一个元素为比较截止点,第二次循环就是以倒数第二个元素为比较截止点,因为第一次循环结束后,最后一个元素是有序的了)。
4. 持续每次对越来越少的匀速重复上面的步骤,知道没有任何一对数字需要比较。
代码实现
此处只讲冒泡排序,排序完成之后找中位数的方法,是小学课本知识(别问我为什么记得那么清楚,我妹刚小学毕业,这么小的她后天就要去外地读书了,我……哭了)
int* bubble_sort(int a[], int n){
//sorting
int i,j,tmp;
for( j = 0; j < n-1; j++){
for( i = 0 ;i < n-j-1; i++){
if(a[i] > a[i+1]){
tmp = a[i];
a[i] = a[i+1];
a[i+1] = tmp;
}
}
}
return a;
}
对两个循环变量的理解是比较关键的部分。
首