交换排序
基本思想:
两两比较,如果发生逆置则交换,直到所有记录都排好序为止。
常见的交换排序
1.冒泡排序 O(n2)
2.快速排序 O(nlog2n)
1.冒泡排序
过程图解
冒泡算法实现
存储结构—记录序列以数据表存储
#define MAXSIZE 20 //设记录不超过20个
typedef int keyType; //设置关键字为int 整型
typedef struct{ //定义记录结构
keyType key; //关键字
infoType otherInfo; //其他数据项
}RedType.;
typedef struct{ //定义顺序表结构类型
RedType r[MAXSIZE+1]; //存储数据表的向量
int length; //顺序表长度
}SqList.;
方法实现
void bubble_sort(SqList &L){ //冒泡排序算法
int m,j,i;
RedType x; //当两个数组元素相互交换时,x作为临时变量
for(m=1;m<=n-1;m++){ //总共需要 m趟 m=元素个数-1 n表示元素个数
for(j==1;j<=n-m;j++){
if(L.r.[j].key>L.r[j+1].key){ //如果放生逆序
x=L.r[j].key;
L.r[j].key=L.r[j+1];
L.r[j+1]=x; //交换
}
}
}
}
2.快速排序
基本思想
(1)任意取一个元素为中心
(2)比取得元素小的一律往前放,比取得元素大的一律往后放,形成左右两个子表
(3)对各子表重新进行规则调整(递归思想)
(4)直到每个元素的子表只剩下一个
思想图解
快速排序算法
void main(){ //主函数
QSort(L,1,L.length);
}
void QSort(SqList &L ,int low, int high){ //对顺序表进行快速排序
if(low<high){ //长度大于1
pivotloc=partition(L,low,high); //此方法就是 中心点的寻找
QSort(L , low, pivotloc-1)); //对低子表进行递归排序
QSort(L , pivotloc+1, high)); //对高子表进行递归排序
}
}
partition函数实现
算法过程图解