简介:
快速排序可以说是归并排序的进阶版,它的主要思想就是找一个”对照物“,一般是数组的第一个元素(因为这样操作简单),然后从头尾开始,每个元素和这个”对照物“比较,比如说:
将第一个数字“5” 和最后一个数字”9“对比,因为9比5大,所以9就放在5的右边(即不操作)然后将指向9的指针 减一 变成 指向0
然后继续比较5和0,这时发现0是比5小的,就直接交换5和0的位置(然后指向0位置的指针,就加一指向了2):
这个时候,右边的比较就结束了,就要开始从左往右比了,即2和5比较,如果因为2比5小,所以指向2的指针直接加一,指向3,然后继续将3和5比较,一直持续这个过程指导遇到一个比5大的,然后交换位置,终止这个递归:
得到这个序列,然后指导指标的位置指针和右边的位置指针相邻时结束。
代码实例:
#include <stdio.h>
int sort(int *array, int low, int high) {
int i = low;
int j = high;
int key = array[low];
while (i < j) {
while (i < j && array[j] >= key) {
j--;
}
if (i < j) {//因为有的数列可能就是有序的了,这个时候就是i=j了
array[i++] = array[j];
}
while (i < j && array[i] < key) {
i++;
}
if (i < j) {
array[j--] = array[i];
}
array[i] = key;
sort(array, low, i - 1);
sort(array, i + 1, high);
}
return 0;
}
int main()
{
int arr[10];
int i,j,temp;
printf("请输入10数字:\n");
//输入10个数字
for (i = 0; i < 10; i++) {
scanf_s("%d", &arr[i]);
}
printf("排序前的数组为:\n");
for (i = 0; i < 10; i++)
printf("%d,", arr[i]);
sort(arr, 0, 10-1);//这里得是9,不能是10,因为这里的数字是表示在数组中的位置的,所以得减一
printf("排序后的数组为:\n");
for (i = 0; i < 10; i++)
printf("%d,", arr[i]);
return 0;
}