数据结构之基本排序的个人攻略和理解

排序类型

 

下面写一写我对这些排序的理解:

代码部分为C语言书写

1、冒泡排序

最最最基础的排序,确定一个元素a[i]后,与相邻的元素a[i+1]进行比较,要是a[i]大,就a[i]继续和后面的比,要是a[i+1]大,就a[i+1]和后面的元素比。就像排位赛一样,小王和小李PK,小王赢了,小王继续战斗,与后面的选手PK,一轮PK完后,谁厉害,就是第一名。然后第二轮PK,还是从未排序的第一个人开始,一轮一轮,每次角逐一个最厉害。

void BubbleSort(RecordType r[], int n)
{//对记录数组r做冒泡排序,n为数组长度
  change = TRUE;
  for(i=1;i<n-1 && change;++i)
  {
    change = FALSE;
    for(j=1;j<=n-1;++j)
    {
      if(i[j].key>r[j+1].key)
      {
        x=r[j];
        r[j]=r[j+1];
        r[j+1]=x;
        change=TRUE;	
      }   
    }
  }
}

2、快速排序

快速排序,最大的特点就是快速

类比两个施工队,施工队一:L,施工队二:R,挖出一块土:T

L先施工,T被挖出来,T原来的位置就有个坑,然后R施工,但是在R施工前,估计自己挖的土和T哪个多,要是自己挖的多,就不挖这个地方,去前面的地方,再估计和T作比较,这次挖要比T少,就开工,把挖的土给L,干完之后,开始休息,L开始施工,L估计然后和T作比较,这次挖的比T多,就开工,把挖的土给R,干完之后休息,R在动工。慢慢R和L汇合到了一起,还有唯一的一个坑,将T填入。然后L和R动工的部分不一定是有序的,所以这两个部分还要自己排序。

void QKSort(RecordType r[],int low,int high)
{
	if(low<high)
    {
      pos=QKPass(r,low,high);//调用一趟快速排序,以枢轴元素为界划分两个子表
      QKSort(r,low,pos-1);//对左子表快速排序
      QKSort(r,pos+1,high); //对右子表快速排序
    }
}
int QKPass(RecordType r[],int low,int high)
{
	x=r[low];//选择基准记录
  while(low<high)
  {
    while(low<high && r[high].key>=x.key)
      high--;//high从右往左找到小于x.key的记录
    if(low<high)
    {
      r[low]=r[high];
      low++;
    }//找到小于x.key的记录,则送入“空单元”r[low]中
    while(low<high && r[low].key<x.key)
      low++;
    if(low&l
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值