快速排序

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

步骤为:

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]);
 }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值