快速排序法

  快速排序算法

 

问题描述:   

 /* 快速排序由C•A•R•Hoare在1962年提出,是对冒泡排序的改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据比另外一部分的都小;然后再按此方法,对这两部分数据分别进行快速排序,整个排序过程可以递归进行,直到整个数据变成有序序列为止。相比于冒泡排序,快速排序在时间性能上有大大的提升。
       本案例要求使用指针实现快速排序算法,并将排序结果逐个输出。*/


思路分析:

 

设排序的数组为S[0]...S[n],首先任意选取一个关键数据,将数组分为两部分,一部分全部大于关键数据,另一部分全部都大于关键数据,一趟排序的步骤如下:

  1. 定义变量low,high,并使得low=0,high=n-1;
  2. 任意选取一个关键数据,(一般为数组首个数据,即key=*(low),
  3. high从右边到左边逐个检查,找到第一个小于key的数字,将s[low]和s[high]交换;
  4. low从左边到右边逐个检查,找到第一个大于key的数字,将s[low]和s[high]交换;
  5. 当low>=high,第一趟排序结束,递归调用函数对被分割的两个数据块再次进行快速排序;

代码明细:

 

#include
#include
void quicksort(int *arr,int left,int right)  //快速排序函数
{
	int l,j,key;              //定义关键数据;
if(left>=right)                  //如果left大于或等于right,排序结束;
return;
 l=left;
 j=right;
 key=*(arr+left);                 //将队首设为关键数据;
while(l=arr[l])如果满足leftkey],交换s[left]和s[right];
		l++;
	temp=arr[l];
	arr[l]=arr[j];
	arr[j]=temp;
}
quicksort(arr,left,key-1);      //递归调用排序函数对小于关键值的数据段进行排序;
quicksort(arr,key+1,right);        //递归调用排序函数对大于关键值的数据段进行排序;

}

void print(int *arr,int n)      //输出函数
{
	int l;
	for(l=0;l

 

 

 

 

 

 

 

运行结果:

 

快速排序法_第1张图片

你可能感兴趣的:(c语言寒假复习)