1)包含任务或问题描述和分析
快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
2)设计与实现
1. 在数组中选一个基准数(通常为数组第一个);
2. 将数组中小于基准数的数据移到基准数左边,大于基准数的移到右边;
3. 对于基准数左、右两边的数组,不断重复以上两个过程,直到每个子集只有一个元素,即为全部有序。
3)测试例子与结果分析
4)带注释的源代码
#include <stdio.h>
#include <stdlib.h>
#define MAX 5
void Printarray(int array[])
{
int i;
for (i=0;i<MAX;i++)
{
printf("%d\t",array[i]);
}
printf("\n");
}
void QuickSort(int arr[],int low,int high)
{
if (low<high)
{
int i=low;
int j=high;
int k=arr[low];
while (i<j)
{
while (i<j&&arr[j]>=k)//从右端开始找出第一个小于k的数
{
j--;
}
if (i<j)
{
arr[i++]=arr[j];//将该值赋给i并将i加一
}
while (i<j&&arr[i]<k)//从左端开始找出第一个大于k的数
{
i++;
}
if (i<j)
{
arr[j--]=arr[i];//将该值赋给j并使j减小
}
}
arr[i]=k;//找到i==j的位置并赋k值
printf("经过一次快速排序后的数组为:\n");
Printarray(arr);
QuickSort(arr,low,i-1);//递归排序左半部分
QuickSort(arr,i+1,high);//递归排序右半部分
}
}
int main()
{
int array[MAX]={0};
int i;
for(i=0;i<MAX;i++){
scanf("%d",&array[i]);//循环输入数组
}
printf("初始数组为:\n");
Printarray(array);
QuickSort(array,0,MAX-1);
printf("最后得到的数组为:\n");
Printarray(array);
return 0;
}