【算法总结系列-1】快速排序-c语言实现

最近终于顿悟算法对编程的非凡意义,现计划写一系列的文章来总结下常用且比较重要的算法。

现在第一个要小结的就是  快速排序

#include <stdio.h>
int a[101],n;//定义全局变量,这两个变量需要在子函数中使用

void quicksort(int left,int right)   //快速排序算法
{
  int i,j,t,temp;        
  if(left > right)
	  return;

    temp = a[left];   //temp中存的就是基准数
  i = left;
  j = right;
  while(i != j)
  {
   //顺序很重要,先从右边开始往左边找
	  while(a[j] >= temp && i<j)
		  j--;
	  //再从左往右边找
	  while(a[i] <= temp && i<j)
		  i++;
	  //交换两个数在数组中的位置
	  if(i<j)    //当哨兵i j 没有相遇时
	  {
	        t = a[i];
		a[i] =a[j];
		a[j] =t;
	  }
  }
  a[left] = a[i];
  a[i] = temp;

  quicksort(left,i-1);//继续处理左边的
  quicksort(i+1,right);//继续处理右边的
  return;
}

int main()
{

  int i,j;
  //读入数据
  scanf("%d",&n);      //n就是待排序的个数
  for(i =1 ;i<=n;i++)
	  scanf("%d",&a[i]);

  quicksort(1,n);//快速排序调用
  //输出排序结果
  for(i=1;i<=n;i++)
	  printf("%d",a[i]);

  getchar();getchar();//用了暂停程序,便于查看程序输出的结果,也可以用system("pause")替代
  return 0;

}





  • 6
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值