C语言讲义——快速排序
快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序
它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)
基本思想:
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
先把基准值(最左)存起来
高位(右)大的往左边拉
低位(左)小的往右边拉
最后,存的那个基准值(曾经最左)放中间
对左:相同处理
对右:相同处理
#include <stdio.h>
int quicksort(int arr[], int left, int right) {
if(left < right) {
// 定位最左
int key = arr[left];
int i = left;
int j = right;
while(i < j) {
while(i < j && arr[j] > key) {
// 高标左移←
j--;
}
if (arr[i] != arr[j]) {
// 高位:小的往左边拉
arr[i] = arr[j];
}
while(i < j && arr[i] < key) {
// 低标右移→
i++;
}
if (arr[i] != arr[j]) {
// 低位:大的往右边拉
arr[j] = arr[i];
}
}
arr[i] = key;
quicksort(arr,left,i-1);
quicksort(arr,i+1,right);
}
}
void printArray(int arr[],int len ) {
int i = 0;
for(i = 0 ; i<len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main(int argc, char *argv[]) {
int a[] = {3,4,5,1,2};
printArray(a,5);
quicksort(a, 0, 4);
printArray(a,5);
return 0;
}