交换排序
这次学习了两种交换排序算法:冒泡排序和快速排序算法;两种方法都是基于元素交换的概念而来的,交换排序的基本思想是:两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。下面简单介绍其基本原理。
1、冒泡排序
基本原理:把序列的每个元素当成一个气泡,则轻的气泡在上,重的在下。排序过程为每次从最下面的气泡R[n]开始,让它与上一个气泡R[n-1]比较大小
若比上面的小,则交换顺序,否则不改变。然后进行下一步,对R[n-1]和R[n-2]进行相同的比较,直到R[1]和R[0],这样一趟比较就将序列中最小的额
元素放在了序列的最上面,然后进行第二趟比较,从R[n]到R[1],将第二小的元素放在R[1]位置,依次类推,最后就可以得到排列的序列
演示动画:http://student.zjzk.cn/course_ware/data_structure/web/flashhtml/maopaopaixu.htm
算法为就地排序,是稳定的,由于元素移动次序多,因此性能比直接插入排序要差
2、快速排序
基本原理:采用分治的思想,将问题分成若干个结构相同的问题通过递归来解决。假设一个序列R,i,j作为上下边界,在R中取一个值作为分界点,把R中的值分成两边,左边的比R小,右边的比R大,这样再分别对左右两边的值做相同的运算,最终就可以得到排列好的序列。
演示动画:http://student.zjzk.cn/course_ware/data_structure/web/flashhtml/kuaisupaixu.htm
排序是非稳定的
下面来看具体实现:
#include <iostream>
#include <vector>
using namespace std;
const int N = 20; //定义常量 也可以这样 #define N 20
void disp(