人生难得是欢聚,唯有别离多

排序算法03------------快速排序

1.之前介绍的冒泡和选择排序都是适用于少量的数据,一旦数据量比较大,效率就很低的,因为他们的时间复杂度是O(n²)。

2.今天介绍一种算法不是很难,速度很快的排序算法,快速排序。

一 快速排序

  1)通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,

        整个排序过程可以递归执行。

  2)排序过程动图(来自百度百科)

    

 

 

  3)步骤:

    (1)设置两个变量 i,j,令i=0,j=n-1

      (2)  选择一个元素作为分割点(key),通常选第一个元素,令key=arrary[0]

      (3) 从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]的值交换

      (4) 从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]的值交换

      (5) 重复第3、4步,直到i==j。此时排序完成

二 代码

  

复制代码
 1 #include<stdio.h>
 2 void quickSort(int *arr,int left,int right)
 3 {
 4     int i,j,temp;
 5     i=left;
 6     j=right;
 7     if(i==j)//递归结束条件 
 8         return;
 9     temp=arr[left];
10     while(j>i)
11     {
12         while(j>i&&arr[j]>=temp)
13             j--;
14         arr[i]=arr[j];
15         while(i<j&&arr[i]<=temp)
16             i++;
17         arr[j]=arr[i];
18     }
19     arr[j]=temp;
20     quickSort(arr,0,i);//递归执行,对左半分进行排序 
21     quickSort(arr,i+1,right);//递归执行,对右半分进行排序 
22 }
23 int main()
24 {
25     int i; 
26     int arr[10]={1,3,-9,0,10,2,8,9,19,-1};
27     quickSort(arr,0,9);//选择排序
28     for(i=0;i<10;i++)
29         printf("%d\n",arr[i]);
30     return 0;
31 } 
复制代码

  快速排序是冒泡排序的一种改进,的时间复杂度是O(nlog₂n),是线性级。

posted @   对愁眠  阅读(321)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示