快速排序算法

       快速排序又是一种分而治之思想在排序算法上的典型应用。本质上来看,快速排序应该算是在冒泡排序基础上的递归分治法。即在一个无序的序列中选取一个任意的基准元素pivot,利用pivot将待排序的序列分成两部分,前面部分元素均小于或等于基准元素,后面部分均大于或等于基准元素,然后采用递归的方法分别对前后两部分重复上述操作,直到将无序序列排列成有序序列。 排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况下复杂度为Ο(n2)。

1、快速排序算法定义


#include <stdlib.h>
#include <stdio.h>

typedef  unsigned int  DataField;

/**
 * 快速排序
 * @param data  待排序数组
 * @param left  低位下标
 * @param right 高位下标
*/
void  quick_sort(DataField* data,int  left,int right);

void   show_data(DataField* data,int len);
void  quick_sort(DataField* data,int  left,int right)
{
     int  low = left , high = right;
     /// 递归退出条件
     if( left > right)
        return;
    ///确定pivot
    DataField pivot  = *(data + low);
    while (low < high)
    {
      ///  先从右边向左查找,找到小于pivot的元素及其下下标
       while ( low<high &&  *(data+high)>=pivot)
       { 
          high--;
       }
       /// 再从左向右查找,找到大于pivot的元素及其下标
       while ( low<high && *(data+low)<=pivot )
       {
         low++;
       }
       /// 元素交换
       if(low<high){
        DataField  temp = data[low];
        data[low] =  data[high];
        data[high] = temp;
       }
    }
    /// 将pivot的值与当前高位交换
   // data[left] =  data[high] ; 
   // data[high] =  pivot;
   // quick_sort(data,left,high-1);
  //  quick_sort(data,high+1,right);
     
    data[left]  = data[low];
    data[low]  =   pivot;
    quick_sort(data,left,low-1);
    quick_sort(data,low+1,right);

}

void show_data(DataField *data, int len)
{
    printf("-----------------\n");
    int i = 0;
    for (i; i < len; i++)
    {
        printf("%d\t",*(data+i));
    }
    printf("\n");
}

2、测试快速排序

    DataField arr[] ={ 19,29,49,69,99,59,39,9,79,89 };
    DataField* data = &arr[0];
    int len =  sizeof(arr)/sizeof(DataField);
    quick_sort(data,0,len);

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值