void quickSort(elementType*arr,int left,int right) { int temp , i = left, j = right; int pivot = arr[(left + right)/2]; while (i <= j) { while (arr[i] < pivot) { i++; } while (arr[j] > pivot) { j--; } if (i <= j) { swap(arr[i], arr
时间: 2023-07-15 20:13:33 浏览: 206
[j]); i++; j--; } } if (left < j) { quickSort(arr, left, j); } if (i < right) { quickSort(arr, i, right); } }
这是一个快速排序的实现代码。快速排序是一种高效的排序算法,原理是选取一个基准值,把数组分成两部分,一部分小于基准值,一部分大于基准值,然后对这两部分递归地进行快速排序。
具体实现中,我们首先选取一个基准值,通常是数组中间的元素。然后定义两个指针 i 和 j,分别从数组左右两端开始向中间移动。i 指针从左向右移动,如果找到一个大于等于基准值的元素,就停止;j 指针从右向左移动,如果找到一个小于等于基准值的元素,就停止。如果 i 和 j 指针都停止了,就交换它们所指向的元素,并且 i 和 j 分别向后和向前移动一位。这个过程一直进行到 i > j,此时我们就把数组分成了两部分,左边部分全部小于基准值,右边部分全部大于基准值。然后对这两部分递归地进行快速排序,直到每个小部分只剩下一个元素,排序结束。
快速排序的时间复杂度为 O(nlogn),空间复杂度为 O(logn)。
相关问题
void quickSort(elementType*arr,int left,int right) { int i = left, j = right; int pivot = arr[(left + right)/2]; while (i <= j) { while (arr[i] < pivot) { i++; } while (arr[j] > pivot) { j--; } if (i <= j) { swap(arr[i], arr[j]); i++; j++; } } if (left < j) { quickSort(arr, left, j); } if (i < right) { quickSort(arr, i, right); } }算法思想
这是快速排序算法,其基本思想是通过一次排序将待排序序列分割成独立的两部分,其中一部分的所有元素都比另一部分的元素小,然后再对这两部分分别进行排序,最终整个序列排序完成。具体实现过程如下:
1. 选取一个枢轴元素,一般选择待排序序列的中间位置的元素。
2. 将待排序序列分成两个子序列,左边的序列所有元素都小于枢轴元素,右边的序列所有元素都大于枢轴元素。
3. 对左右两个子序列分别进行递归排序,直到序列长度为1或0。
4. 合并两个已排序的子序列,得到最终的排序结果。
快速排序是一种高效的排序算法,其时间复杂度为O(nlogn),具有较好的实际效率。
void quicksort(int arr[], int left, int right) { if (left >= right) { return; } int pivot = arr[(left + right) / 2]; int i = left - 1, j = right + 1; while (i < j) { do { i++; } while (arr[i] < pivot); do { j--; } while (arr[j] > pivot); if (i < j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } quicksort(arr, left, j); quicksort(arr, j + 1, right); }添加注释
// 快速排序算法实现
void quicksort(int arr[], int left, int right) {
// 如果左右指针重合或者左指针大于右指针,退出递归
if (left >= right) {
return;
}
// 取中间值作为基准值
int pivot = arr[(left + right) / 2];
// 定义左右指针
int i = left - 1, j = right + 1;
// 开始快速排序
while (i < j) {
// 从左向右,找到第一个大于等于基准值的元素
do {
i++;
} while (arr[i] < pivot);
// 从右向左,找到第一个小于等于基准值的元素
do {
j--;
} while (arr[j] > pivot);
// 如果左指针小于右指针,交换两个元素
if (i < j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
// 递归排序左半部分
quicksort(arr, left, j);
// 递归排序右半部分
quicksort(arr, j + 1, right);
}
阅读全文