排序算法——快速排序
算法思想
就快速排序而言,快速排序被认为是一种最好的内部排序方法,快速排序是C.R.A.Hoare,1962年提出一种划分交换排序,它采用一种分治的策略,通常称为分治法。
什么是分治法
分治法基本想通俗来讲分治法就是将原来的问题分解成很多个小问题,但是这些小问题与原来的问题结构相似。通常用递归来解决这些子问题。然后将这些子问题的解组合为原问题的解。
快速排序的基本思想
1,分解
2,求解
3,组合
假设对以下10个数进行快速排序:
6 1 2 7 9 3 4 5 10 8
我们先模拟快速排序的过程:首先,在这个序列中随便找一个数作为基准数,通常为了方便,以第一个数作为基准数base=6。i,和 j,分别表示数组第一个和最后一个。
原数组
6 1 2 7 9 3 4 5 10 8
i j
首先执行while(i<j&&a[j]>=base) j--;
a[j]=8>base,所以j- -,一直减到a[j]=5<6,此时需要执行if(i<j) a[i] =a[j];
这条语句a[i]=5;
5 1 2 7 9 3 4 5 10 8
i j
接下来执行while(i<j&&a[i]<=base) i++;
此语句,一直到a[i]=7>base,此时就要执行if(i<j) a[j]=a[i];
5 1 2 7 9 3 4 7 10 8
i j
接下来继续执行while(i<j&&a[j]>=base) j--;
此语句一直到a[j]=4<base;此时需要执行if(i<j) a[i] =a[j];
5 1 2 4 9 3 4 7 10 8
i j
接下来执行while(i<j&&a[i]<=base) i++
此语句,一直到a[i]=9<base,此时就要执行if(i<j) a[j]=a[i];
5 1 2 4