快速排序-排序算法:快速排序【图解+代码】

AID:
CID:
视频图片:
作者头像:
弹幕地址:
视频描述:

热门回复:

  • 炎忍:我照着 UP 写的但是运行不了,输出之后还是原样,这是我写的: #include <stdio.h> #include <stdlib.h> void swap(int *a, int *b) { int temp = *a; *a = *b; *a = temp; } int partPos(int arr【】, int low, int high) { int i = low - 1; int j = high; int pivot = arr【high】; while (1) { while (i < high - 1 && arr【++i】 < pivot) ; while (j > 0 && arr【--j】 > pivot) ; if (i < j) { swap(&arr【i】, &arr【j】); } else { swap(&arr【i】, &arr【high】); break; } } return i; } void quick(int arr【】, int low, int high) { if (low < high) { int mid = partPos(arr, low, high); quick(arr, low, mid - 1); quick(arr, mid + 1, high); } } void quickSort(int arr【】, int n) { quick(arr, 0, n - 1); } void printArr(int arr【】, int n) { for (int i = 0; i < n; i++) { printf("%d\n", arr【i】); } }
  • Langthron:i是不需要判断的,因为当i走到high位置的时候 arr【i】 == pivot,即arr(++i) < pivot的条件必定不成立,循环就退出了,不会越界。 但是j要判断,因为左边的元素可能没有小于或等于pivot的值,此时 j = -1,也就越界了,这也正是up主说的极端情况:当分治的部分位于源数组的最左边,且j没有索引到比pivot小的元素时,j会越界到-1。
  • 中国移不动198:[热词系列_妙啊]
  • 路西法辰星z:能问一下up用的什么主题吗? [给心心]
  • 9度风:up说话真好听[星星眼]