快速排序
- 主要思想
假设我们现在要对一个数组ar[]进行排序。首先我们需要随机选择一个基准值(一般选数组的首元素),然后将数组中的其他值与其进行比较,将小于它的数放在其左侧,大于的放在右侧(假定按从小到大排序)。这就完成了一趟快速排序
- 算法思路
假定现在有ar[0]—ar[n-1]这n个数据
1.将变量i指向数组的首元素,j指向数组的最后一个元素,key表示基准值(即ar[0]的值)
2.固定i的值,从j开始向前搜索,即从后向前进行(j–),找到第一个小于key的值就交换ar[i]和ar[j]的值
3.固定j的值,从i开始向后搜索,即从前向后进行(i++),找到第一个大于key的值就交换ar[i]和ar[j]的值
4.重复2、3步,直到i==j。(即在第2步中,若进行了交换后直接执行第3步,若第3步也进行交换后经判断i!=j的话,则又从第2步开始继续进行查找交换)
- 数据分析
原始数据如下:
ar[0] | ar[1] | ar[2] | ar[3] | ar[4] | ar[5] | ar[6] | ar[7] | ar[8] |
---|---|---|---|---|---|---|---|---|
22 | 45 | 12 | 9 | 5 | 34 | 10 | 3 | 27 |
①.i=0; j=8; key=22;执行算法思想中的第2步,从后向前找到第一个小于key的值(ar[7]),此时i=0; j=7; key=22; 交换之后数据如下:
ar[0] | <
---|