数据结构之快速排序

旁白:算法小白白一枚,突然要掌握算法。花废了2个小时把一些基本的知识掌握。包括伪代码书写规则、算法设计技术和时间复杂性的计算弄清楚。本打算用本子做笔记,一想发现没笔、没本子,这对本在疫情被困在家的我来说是一笔“巨额”,所以想到写博客,一方面刚接触感觉有点意思,另一方面当做笔记随时可以复习看看…

废话不多说,本文章主要介绍的是快速排序这一算法。
关于快速排序,最重要的是要懂它如何实现的原理,通过昨天在网上查找资料,发现一个博主讲的快速排序的原理很通俗易懂,下面贴出超链接,原理还不懂的小伙伴可以先去把原理弄懂:在马桶上看算法

看到这里来了,我相信小伙伴们应该对快速排序的原理比较了解了,那么问题来了,怎么样把原理变成代码呢?不要换,接下来我会一步一步的贴出代码。

快速排序主要是利用分治法来解决,利用分治法那么少不了伪代码了(分治法不懂得可以翻书或者上网冲浪)。

这是我刚学的伪代码,自己尝试着写的(有问题的,各位看官希望能指出来呀)
1 quicksort(A,left,right,i,j,t,temp)
2 temp←A[left]
3 i←left
4 j←right
5 while i!=j
6 do
7 while A[j]>=temp&&i<j
8 do j←j+1
9 if A[i]>=temp&&i<j
10 then i←i+1
11 交换A[i]和A[j]
其中A是数组,left和right是参数,i,j是下标,t是中间转换需 要的,temp是基准数

emm…大致就是这个过程,找准一个基准数,然后下标从两头向中间滑动,满足条件就交换位置…

下面就是写程序,实现这个算法。(以C为例)

#include <stdio.h>//库函数,不用多说
int a[7],n;//定义一个数组和n
void quicksort(int left, int right)//定义快速排序函数quicksort,两个参数分别是left和right
{
 int i,j,t,temp;//定义下标i,j和基准数temp,t在后面交换位置需要用的
 if(left>right)//最先判定,必须要有的
     return ;
    temp=a[left];//把基准数放在最左边一个
    i=left;//赋值
    j=right;//赋值
 while(i!=j)
 {
  while(a[j]>=temp&&i<j) //从右往左找,找比temp大的数
   j--;
  while(a[i]<=temp&&i<j)//从左往右找,找比temp小的数
   i++;
  //交换位置
  if(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);//继续循环
}
int main()
{
 int i,n=7;
 printf("输入7个杂序的数字:");
 for(i=1;i<=n;i++)
 scanf("%d",&a[i]);
 quicksort(1,n);
 //输出排序后的结果
 for(i=1;i<=n;i++)//for循环,依次输出
 printf("%d",a[i]);
 getchar();
 getchar();
 return 0;
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值