快速排序

来源:互联网 发布:sql 添加合计行 编辑:程序博客网 时间:2024/05/17 04:40

快速排序也叫做分化交换排序,是交换排序的一种。它采用一种叫做分治的策略。

步骤为:

1.从数列中挑选一个元素,称为“基准”;

2.重新排序,所有比基准小的元素排到基准前面,比基准大的元素排到基准后面;

3.递归。

快速排序是不稳定的。

#include <stdio.h>
#include <stdlib.h>
int partition(int *array,int i,int j)
{
 int temp=*(array+i);
 while(i<j)
 {
  while(i<j && *(array+j)>=temp)
  {
   j--;
  }
  if(i<j)
  {
   *(array+i)=*(array+j);
   i++;
  }
  while(i<j && *(array+i)<=temp)
  {
   i++;
  }
  if(i<j)
  {
   *(array+j)=*(array+i);
   j--;
  }
 }
 *(array+i)=temp;
 return i;
}
void quicksort(int *array,int low,int high)
{
 int mid;
 if(low < high)
 {
  mid=partition(array,low,high);
  quicksort(array,low,mid-1);
  quicksort(array,mid+1,high);
 }
}
void main()
{
 int i,n;
 int array[255];
 printf("请输入数据个数:");
 scanf("%d",&n);
 if(n<=0 || n>255)
 {
  printf("n is not correct!\n");
  exit(1);
 }
 printf("请一次输入待排序的数据");
 for(i=1;i<=n;i++)
 {
  scanf("%d",&array[i]);
 }
 printf("\n待排序的数组为:\n");
 for(i=1;i<=n;i++)
 {
  printf("%d ",array[i]);
 }
 quicksort(array,1,n);
 printf("排序后的数组为:\n");
 for(i=1;i<=n;i++)
 {
  printf("%d ",array[i]);
 }
}

 

原创粉丝点击