在本科时学的数据结构,所以还是先用c语言描述。本文今天(2018.9.25)先讨论两种简单的排序
1.冒泡排序
2.选择排序
1.冒泡排序:
两两比较相邻记录的关键字,如果反序则交换,直到没有反序为止。(实际上就是,一轮比较,可以把一个最小的数字放到最后边)
// 冒泡排序初级(顺序表)
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.选择排序:
找最小值,并交换位置
// 对顺序表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]的值
}
}
网友评论