快速排序算法
简介:
先从数据序列中选一个元素,并将序列中所有比该元素小的元素都放到它的右边或左边,再对左右两边分别用同样的方法处之直到每一个待处理的序列的长度为1, 处理结束。
,大的在右边
10 4 7 8 5 9 3 12 11
1: 选10位一个基准数,进行第一次排序,小于10的放左边,大于10的放右边,得到新的数组
[4,7,8,5,9,3,10,12,11],以10为基准分成左右2部分,[4,7,8,5,9, 3],10,[12,11],两边数组分别进行快速排序,以数组第一个元素作为基准进行排序。
当前数据为[4,7,8,5,9,3],10,[12,11]
2: [4,7,8,5,9,3]以第一个元素4作为基准排序得到[3,4,5,7,8,9];后面的数组为[11,12],结束。
当前数据为[3],4,[5,7,8,9],10,11,12,因为3为单个的,所以[3]不需再进行排序,目前只需对[5,7,8,9]进行处理
3: [5,7,8,9],以第一个元素5作为基准排序,得到5,[,7,8,9]
当前数据为3,4,5,[7,8,9],10,11,12
4: 类似步骤3,分别把7,8,9给独立出来,最终得到数据3,4,5,7,8,9,10,11,12
排序演示:
注意:第一遍快速排序不会直接得到最终结果,只会把比10大和比10小的数分到10的两边。为了得到最后结果,需要再次对下标2两边的数组分别执行此步骤,然后再分解数组,直到数组不能再分解为止(只有一个数据),才能得到正确结果。
核心代码:
void sort(int *a,
快速排序 来自淘豆网m.daumloan.com转载请标明出处.