持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情
前言
昨天分享了排序算法中插入排序,今天继续来总结交换排序。
交换排序
交换排序的基本思想:两两比较待排序记录的关键码,如果发生逆序(即排列顺序与排序后的次序正好相反),则交换之,直到所有记录都排好序为止。
交换排序最经典的算法包括:
- 冒泡排序
- 快速排序
冒泡排序
基本思路:每趟不断将记录两两比较,并按“前小后大” (或“前大后小”)的规则交换。
例:T=(21,25,49,25*,16,08)
代码实现:
void bsort (int a[], int n) {
int temp,i,j;
int flag; //交换标志
for(j=1; j<=n-1;j++) { //最多做n-1趟排序
flag=0; //本趟排序开始前,交换标志应为0
for(i=1;i<=n-j;i++){ //对当前无序区扫描
if(a[i]>a[i+1]) { //交换记录
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
flag=1; //发生了交换,故将交换标志置为真
}
}
if(flag= =0) break; //本趟排序未发生交换,提前终止算法
}
}
快速排序
基本思想:从待排序列中任取一个元素 (例如取第一个) 作为中心,所有比它小的元素一律前放,所有比它大的元素 一律后放,形成左右两个子表;然后再对各子表重新 选择中心元素并依此规则调整,直到每个子表的元素 只剩一个。此时便为有序序列了。
例: T=(21,25,49,25*,16,08)
排序过程的一部分如下:
快速排序的代码实现涉及递归的知识,目前还没有系统刷到递归,代码以后补上。
后记
接下来的几天里会写几篇文章一起总结排序算法,一起来学习排序算法吧!