快速排序法(详解)C语言

简介: 快速排序法(详解)C语言

前言

接下来我们来学习算法中的快速排序算法,快速排序算法不同于冒泡排序等基本算法,这是一种快捷,运行时间很短的一种快速对数组元素进行排序的算法。


一、认识快速排序

快速排序法,是给以一个数组,然后对里面的元素进行排序,速度很快,比冒泡排序等一些简单的排序方法,更为快速,与归并排序差不多。

二、使用步骤

1.原理

1)第一步是找数组中随意的一个元素值,设定为x

2)设定两个指针分别为 i j 指向数组左侧 、右侧  ,这里我们设定为

 i=l-1   j=r+1     这是因为  我们想要第一步进去这个循环的时候就让 l 和 r下标对应元素与x进行比较,i先向右移动 i++ 直到遇到大于等于x的元素 ,停止循环,再让 j 向左移动,j--;直到遇到小于等于x的元素,j停止 交换 i 和 j 对应下标的元素

3)然后对x左侧的元素进行递归处理,对x右侧的元素进行递归处理,其实也就是 i 或者 j 这个时候i 和 j 是相等的  都是指向x的下标

代码如下(示例):

1. quick_sort(int q[], int l, int r) {
2.  if (l >= r) {
3.    return;
4. 
5.  }  //如果l大于r的话,不用比较了 ,直接返回就可以了  说明没有排序完成或者是一开始传入数值l r就有问题
6.  int x = q[l];    //x的取值可以为数组中的任意一个元素,但是要知道的是 如果用的l下表对应的元素 后面的递归操作r应该传参为 j  而不是用i  
7. //防止发生死循环 相应的如果是用 q【r】  那么传参的时候r不能用j  只能用i
8.  int i = l - 1;
9.  int j = r + 1; //取的是数组第一个元素的左边的地址,数组最后一个元素的右边的地址,这样进入下面循环就可以直接用do,while进行比较
10.   while (i < j) {
11.     do {
12.       i++;
13.     } while (q[i] < x);
14.     do {
15.       j--;
16.     } while (q[j] > x);
17.     if (i < j) {
18.       int tmp = q[i];
19.       q[i] = q[j];
20.       q[j] = tmp;   //当i 和 j都停止的时候 进行交换 下标对应的元素
21.     }
22.   }
23.   quick_sort(q, l, j);//左右遍历  这个时候  i=j且为指向x的下标(因为x为数组中的元素,所以经过上面的循环,i和j指向x了)
24.   quick_sort(q, j + 1, r);
25. }
26. 
27. int main()
28. {
29.   int n = 0;
30.   int arr[10000] = {0};
31.   scanf("%d", &n);
32.   for (int i = 0; i < n; i++) {
33.     scanf("%d", &arr[i]);
34.   }
35.   quick_sort(arr, 0, n - 1);
36.   for (int i = 0; i < n; i++) {
37.     printf("%d ", arr[i]);
38.   }
39.   return 0;
40. }
41.

2.测试

检验是否排序成功

对于 i  和  j  最后的位置进行测定  看看是否和 x的下标相同

由此可知,实际上就是如此,得到的 i=j  且为指向x的下标


总结

这一期对于快排的认识就到此为止, 下一期,我们来讲解归并排序的算法内容。

相关文章
|
5天前
|
C语言
【C语言/数据结构】排序(快速排序及多种优化|递归及非递归版本)
【C语言/数据结构】排序(快速排序及多种优化|递归及非递归版本)
11 0
|
5天前
|
算法 C语言
C语言之冒泡排序、快速排序法、希尔排序法
C语言之冒泡排序、快速排序法、希尔排序法
|
7月前
|
存储 算法
玩转快速排序(C语言版)
玩转快速排序(C语言版)
52 0
|
5天前
|
搜索推荐 C语言
【c语言】快速排序
【c语言】快速排序
16 0
|
5月前
|
算法 搜索推荐 编译器
一文带你学透快排(快速排序C语言版)
一文带你学透快排(快速排序C语言版)
|
5月前
|
存储 算法 C语言
【数据结构】深入浅出理解快速排序背后的原理 以及 版本优化【万字详解】(C语言实现)
【数据结构】深入浅出理解快速排序背后的原理 以及 版本优化【万字详解】(C语言实现)
61 0
|
7月前
|
算法 C语言
C语言---数据结构实验---查找算法的实现---实现给定数组的快速排序
C语言---数据结构实验---查找算法的实现---实现给定数组的快速排序
|
7月前
|
算法 C语言
【C语言】快速排序
【C语言】快速排序
153 0
|
8月前
|
搜索推荐 算法 C语言
【数据结构】—从冒泡排序丝滑过度快速排序(含C语言实现)
【数据结构】—从冒泡排序丝滑过度快速排序(含C语言实现)
【数据结构】—从冒泡排序丝滑过度快速排序(含C语言实现)
|
9月前
|
搜索推荐 算法 程序员
C语言快速排序降序实现
快速排序是一种常用的排序算法,其灵活性和高效性使其成为程序员们喜爱的排序方式之一。在这篇文章中,我们将探讨如何使用C语言来实现快速排序算法,并实现一个降序排序的例子。
118 0