赞
踩
分治法的精髓:
快速排序原理:从一组数中选出一个pivot(中心轴),将大于它的数放右边,小于它的数放左边,然后再从左边和右边的俩组数中分别执行此操作,此时,数组就是有序的了。
// // Created by a1073 on 2019/7/4. // #include <stdio.h> void quickSort(int[], int, int); int main(void) { int array[6] = {1, 9, 4, 6, 3, 2}; quickSort(array, 0, 5); for (int i = 0; i < 6; ++i) { printf("array[%d] = %d\n", i, array[i]); } return 0; } void quickSort(int array[], int left, int right) { int i = left; int j = right; int temp; int pivot; //中心轴 pivot = array[(i + j) / 2]; while (i <= j) { while (array[i] < pivot) { /* * 向右搜索比pivot值大数据*/ i++; } while (array[j] > pivot) { /* * 向左搜索比pivot值小的数据*/ j--; } if (i <= j) { /* * if的判断条件与while的循环条件不重复 * while的判断条件仅仅是控制循环次数 * 而if中的判断——是否执行互换的条件 * 如果i>j的话代表此次的循环结束*/ temp = array[i]; array[i] = array[j]; array[j] = temp; i++; j--; } } /* * 此刻i在j的右边 * 必须进行判断才能进行递归 * 否则在到最后无法停止递归 * */ if(j > left){ quickSort(array, left, j); } if(i < right){ quickSort(array, i, right); } }
千万注意最后的结束条件!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。