快速排序(C语言)

快速排序(英语:Quicksort),又称分区交换排序,简称「快排」,是一种被广泛运用的排序算法。

快速排序的工作原理是通过分治的方式来将一个数组排序。

快速排序分为三个过程:

  1. 将数列划分为两部分(要求保证相对大小关系);
  2. 递归到两个子序列中分别进行快速排序;
  3. 不用合并,因为此时数列已经完全有序。

对于完成一个快排函数,需要传入的参数分别是需要排序的数组a,最左边数据的下标以及最右边数据的下标


这里先介绍这一种方法:交换法,而实现交换的函数比较简单,这里不过多赘述。

void Swap(int* a,int* b) {
	int tmp = *a;
	*a = *b;
	*b = tmp;
}

这一方法的过程是:

先right从右向左开始遍历,right向左走,如果遇到比a[key]更加小的值就停下来;

再left从左向右开始遍历,left开始向右走,相反在遇到比a[key]更加大的值就停下来;

将数组中的两个值作交换;

right再重新开始继续向左走,不断重复这一过程直到二者相遇;

相遇后将相遇处数组的值与a[key]交换,同时将key的值改为相遇处的下标;

向下递归。

如图,举个简单的例子。

void QuickSort(int* a, int left, int right) {

	if (left >= right) {//放在最前
		return; 
 	}
	int begin = left, end = right;//left与right 会被改变,用两个变量保留它们的值用于接下来的递归

	int key = left;

	while (left < right) {

		while (left < right && a[right] >= a[key]) {
			right--;
		}
		 
		while (left < right && a[left] <= a[key]) {
			left++;
		}
		Swap(&a[left], &a[right]);

	}

	Swap(&a[left], &a[key]);
	key = left;

	QuickSort(a, begin, key - 1);
	QuickSort(a, key + 1, end);
}

在测试一下结果:

没有问题。

(本人资历尚浅,如果文中有任何问题,劳请指出。)

相关推荐

  1. 快速排序--C语言

    2024-03-24 10:20:02       43 阅读
  2. C语言排序快速排序

    2024-03-24 10:20:02       29 阅读
  3. C语言实现快速排序算法

    2024-03-24 10:20:02       27 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-24 10:20:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-24 10:20:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-24 10:20:02       82 阅读
  4. Python语言-面向对象

    2024-03-24 10:20:02       91 阅读

热门阅读

  1. 【NC229005】同余方程

    2024-03-24 10:20:02       39 阅读
  2. 协同过滤前置条件

    2024-03-24 10:20:02       35 阅读
  3. 蓝桥集训之星空之夜

    2024-03-24 10:20:02       40 阅读
  4. 【Docker】常用命令 docker network inspect

    2024-03-24 10:20:02       39 阅读
  5. 什么是VSYNC信号

    2024-03-24 10:20:02       38 阅读
  6. Android 观察者模式

    2024-03-24 10:20:02       43 阅读
  7. LeetCode 2657.找到两个数组的前缀公共数组

    2024-03-24 10:20:02       44 阅读
  8. 【Docker】常用命令 docker exec

    2024-03-24 10:20:02       41 阅读
  9. 基于单片机的蓄电池电量检测

    2024-03-24 10:20:02       41 阅读
  10. ORACLE:VARCHAR2(4000)太小怎么办?

    2024-03-24 10:20:02       39 阅读
  11. 看PDF时点击书签页面变小的解决方法

    2024-03-24 10:20:02       35 阅读