快速排序

这篇博客详细介绍了快速排序算法的工作原理,通过选取一个‘对照物’,利用两个指针从数组两端进行比较并交换元素,实现排序。文中提供了一个C语言的代码实例,展示了快速排序的过程,并给出了排序前后的数组展示。此算法适用于理解排序算法和数据结构的学习。
摘要由CSDN通过智能技术生成

简介:

快速排序可以说是归并排序的进阶版,它的主要思想就是找一个”对照物“,一般是数组的第一个元素(因为这样操作简单),然后从头尾开始,每个元素和这个”对照物“比较,比如说:

将第一个数字“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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值