怎么一键算多个平均分

首页 > 教育 > 作者:YD1662023-04-16 06:58:05

接下来进行第1次循环 ,从right指针开始,让指针所指向的元素和基准元素做比较。如果大于或等于 pivot,则指针向左 移动;如果小于pivot,则right指针停止移动,切换到left 指针。

在当前数列中,1<4,所以right直接停止移动,换到left指针,进行下一 步行动。

轮到left指针行动,让指针所指向的元素和基准元素做比较。如果小于 或等于 pivot,则指针向右 移动;如果大于 pivot,则left指针停止移动。

由于left开始指向的是基准元素,判断肯定相等,所以left右移1位。

怎么一键算多个平均分,(13)

由于7>4,left指针在元素7的位置停下。这时,让leftright指针所指向的元素进行交换。

怎么一键算多个平均分,(14)

接下来,进入第2次循环 ,重新切换到right指针,向左移动。right指针先移动到8,8>4,继续左移。由于2<4,停止在2的位置。按照这个思路,后续步骤如图所示。

怎么一键算多个平均分,(15)

那么快速排序怎样用代码来实现呢?

双边循环法

/** * 快速排序,双端循环 * @param arr * @param startIndex * @param endIndex */ public static void quickSort(int[] arr, int startIndex, int endIndex){ //递归结束循环条件 if(startIndex >= endIndex){ return; } //找到基准元素 int partitionIndex = partition(arr, startIndex, endIndex); quickSort(arr, startIndex, partitionIndex - 1); quickSort(arr, partitionIndex 1, endIndex); } /** * 分治 * @param arr * @param startIndex * @param endIndex * @return */ private static int partition(int[] arr, int startIndex, int endIndex) { //取第一个位置的元素作为基准元素(也可以随机选择) int pivot = arr[startIndex]; int left = startIndex; int right = endIndex; while (left != right){ //控制right 指针比较并左移 while (left < right && arr[right] > pivot){ right--; } //控制left指针比较并右移 while (left < right && arr[left] <= pivot){ left ; } //交换left和right 指针所指向的元素 if(left < right){ int p = arr[left]; arr[left] = arr[right]; arr[right] = p; } } //pivot 和指针重合点交换 arr[startIndex] = arr[left]; arr[left] = pivot; return left; }单边循环法

双边循环法从数组的两边交替遍历元素,虽然更加直观,但是代码实现相对烦琐。而单边循环法则简单得多,只从数组的一边对元素进行遍历和交换。我们来看一看详细过程。

给出原始数列如下,要求对其从小到大进行排序。

怎么一键算多个平均分,(16)

上一页12345下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.