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;
}
posted @ 2019-07-15 21:09  虎老狮  阅读(266)  评论(0编辑  收藏  举报