码迷,mamicode.com
首页 > 编程语言 > 详细

快速排序c语言实现

时间:2018-01-08 14:50:11      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:条件   快速   操作   排序   停止   oid   使用   冒泡排序   交换   

快速排序

    先找到一个数作为基准点,大于基准点的数放到右边,小于或等于基准点的数放在左边,然后再使用递归,在基准点左右两边进行相同的操作,当递归进入的数只有一个时可以停止递归。

 

 

     如何实现将小于或等于基准点的数放左边,大于基准点的数放右边?

     为了方便,选取数组第一个数作为基准点。

    使用两个哨兵,分别从数组的两边出发,发现不符合条件的点就立刻停下。当两个哨兵都停下时则交换哨兵对应的两点。

    当两个哨兵碰面时则交换基准点和哨兵对应的数。

 

 

    可以看出快速排序在最差情况下时间复杂度为O(N2),但它比冒泡排序要快很多,因为冒泡排序只是交换相邻的点儿快速排序却跳跃性的交换两边的点。

 

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int a[8]={1,3,3,67,23,214,5,3};
 4 void quicksort(int start,int over)
 5 {
 6     int key=a[start],change;
 7     int x=start,y=over;
 8     if(x>=y)return;
 9     while(1)
10     {
11         if(a[y]>key)
12          y--;
13         else if(a[x]<=key)
14          x++;
15         else
16         {
17             change=a[x];
18             a[x]=a[y];
19             a[y]=change;
20         }
21         if(x==y)break;
22     }
23     a[start]=a[x];
24     a[x]=key;
25     quicksort(start,x-1);
26     quicksort(x+1,over);
27 }
28 int main()
29 {
30     int i;
31     quicksort(0,7);
32     for(i=0;i<8;i++)
33         printf("%d  ",a[i]);
34     return 0;
35 }

 

 

 

快速排序c语言实现

标签:条件   快速   操作   排序   停止   oid   使用   冒泡排序   交换   

原文地址:https://www.cnblogs.com/carcar/p/8242236.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!