快速排序算法

快速排序算法:交换排序的思想;

排序算法步骤:

1、  首先设定一个分界值,通过该分界值将数组分成左右两部分;

2、  将大于等于分界值的数据集中到数组的右边,小于分界值的数据集中到数值的左边;此时,左边部分中各个元素都小于等于分界值,而右边部分中各个元素都大于等于分界值;

3、  然后,左边和右边的数据可以独立排序;对于左侧的数组数据,又可以设定一个分界值将该部分数据分成左右两部分,同样在左边放置较小值,右边放置最大值;右边的数组数据也可以做类似的处理;

4、  重复上述过程,可以看出,这是一个递归定义。通过递归左侧部分排好序后,在递归排好右侧部分顺序。当左右两个部分数据排序完成后,整个数组的排序也就排好了;

//#include "stdafx.h"

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#define SIZE 18  //数组大小

void QuickSort(int *arr, int left, int right)//快速排序算法

{

         int f,t;

         int rtemp,ltemp;

         ltemp = left;

         rtemp = right;

         f = arr[(left + right)/2];  //分界值

         while(ltemp < rtemp)

         {

                   while(arr[ltemp] < f)

                   {

                            ++ ltemp;

                   }

                   while(arr[rtemp] > f)

                  {

                            -- rtemp;

                   }

                   if(ltemp <= rtemp)

                   {

                                     t = arr[ltemp];

                            arr[ltemp] = arr[rtemp];

                            arr[rtemp] = t;

                                                -- rtemp;

                                                ++ ltemp;

                   }

         }

         if(ltemp == rtemp)

         {

                   ltemp ++;

         }

         if(left < rtemp)

         {

                   QuickSort(arr,left,ltemp - 1);     //递归调用

         }

         if(ltemp < right)

         {

                   QuickSort(arr,rtemp + 1,right);    //递归调用

 

         }

}

 

int main()

{

         int i;

         int shuzu[SIZE];    //声明数组

         srand(time(NULL));  //初始化数组

         for(i = 0; i < SIZE; i ++)

         {

             shuzu[i] = rand()/1000 + 100;  //随机数组函数

         }

         printf("排序前:\n");

         for(i = 0; i < SIZE; i ++)

         {

                   printf("%d ",shuzu[i]);

         }

         printf("\n");

         QuickSort(shuzu,0,SIZE - 1);

         printf("排序后: \n");

         for(i = 0; i < SIZE; i ++)

         {

                   printf("%d ",shuzu[i]);

         }

         printf("\n");

 

//system("pause");

}

 

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值