冒泡排序&选择排序

在本科时学的数据结构,所以还是先用c语言描述。本文今天(2018.9.25)先讨论两种简单的排序
1.冒泡排序
2.选择排序

1.冒泡排序:

两两比较相邻记录的关键字,如果反序则交换,直到没有反序为止。(实际上就是,一轮比较,可以把一个最小的数字放到最后边)

冒泡排序.gif

// 冒泡排序初级(顺序表)
void BubbleSort0(SqList *L){
    int i,j;
    for(i = 1; i < L->length; i++){
        for(j = i+1; j <= L->length; j++){
            if(L->r[i] > L->r[j]){
                swap(L,i,j);    //交换L->r[i]与L->r[j]的值
            }
        }
    }
}

比较过程可以这么理解:(比如有10个数字的数组)
第1轮,需要比较10-1=9次;
第2轮,需要比较10-2=8次;(因为第一轮已经确定了一个数字)
...

2.选择排序:

找最小值,并交换位置

选择排序.gif

// 对顺序表L选择排序
void SelectSort(SqList *L){
    int i,j,min;
    for(i = 1,i < l->length; i++){
        min = i;    //将当前下标定义为最小值
        for(j = i+1; j <= l->length; j++){  //循环
            if(L->r[min] > L->r[j])     //如果有小鱼当前最小值的关键字
                min = j;    //将此关键字的下标赋值给min
        }
        if(i != min)        //如果min不等于i,说明找到最小值,交换
            swap(L,i,min);  //交换L->r[i]与L->r[min]的值
    }
}

你可能感兴趣的:(冒泡排序&选择排序)