赞
踩
快速排序算法:交换排序的思想;
排序算法步骤:
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");
}
运行结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。