算法导论 · 分治法 · 快速排序

  • 算法说明
    将首元素作为一个Key,从两边往中间遍历,用这个key,分成比它大和比它小的两部分,递归下去
  • 源代码
#include <cstdio>
int a[10] = {1, 4, 5, 7, 8, 9, 0, 3, 2, 6}, n = 10; //待排数组

int partition(int arr[], int p, int q) {
	int i = p, j = q, key = arr[p];
	while(i < j) {
		while(i < j && arr[j] > key) j--;
		if(i < j) arr[i++] = arr[j];
		while(i < j && arr[i] < key) i++;
		if(i < j) arr[j--] = arr[i];
		arr[i] = key;
	}
	return i;
}
void quickSort(int arr[], int p, int q) {
	if(p < q) {
		int r = partition(arr, p, q);
		quickSort(arr, p, r - 1);
		quickSort(arr, r + 1, q);
	}
}
int main() {
	
	quickSort(a, 0, n - 1); //快排
	 
	for(int i = 0; i < n; i++) { //打印结果 
		printf("%d ", a[i]);
	}
	 
	return 0;
} 
  • 运行结果
    在这里插入图片描述
发布了77 篇原创文章 · 获赞 40 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/y_dd6011/article/details/97426934