C语言冒泡排序

于大一到大二忙于做小生意,耽误了学业,

虽然软件工程的学生,但是到了大三笔试实习生的时候我被己,肯定也被人家鄙视了,连一个冒泡排序和快速排序都写错了,

于是痛下决心,回到住处练习写出两个排序。亡羊补牢,犹未晚也。为何要发这么个弱智的小东东,在于我今日要重拾自己,热爱生活,将自己的点点滴滴记录下来,我渴望有一天可以成为IT大牛,那就让CSDN来记录我的蜕变吧。每篇文章前面我都要写上这么一句话来勉励自己:阿涛,你要认真对待每一件事,你要潇洒,你要做自己!

阿涛,你要认真对待每一件事,你要潇洒,你要做自己!

 

冒泡排序:

定义:从第一个数开始,和其后面的第一个数比较,若大之,则交换,否则,和第三个数比较,直到第一个数和所有的数都比较完,完成第一趟排序,并选出了最大的一个数,排在了最后面,然后在将第一趟排序好的数组的第一个数和后面的数依次比较,不必和最后一个数比较了,因为最后一个数是最大数了。如此,第三趟排序不必和最后两个数比较了。当多有的数都比较过后,排序完成。

代码如下:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
 int a[]={4,5,2,6,9,7,5,74,56,89,132};

Bubble(a,11);

 int i=0;
 for(;i<11;i++)
 {
  printf("%d:%d\n",i,a[i]);

 }
 return 0;
}

void Bubble(int a[],int len)
{
 int length=len;
 int i=0;
 int j=0;
 for(;i<len;i++)
 {

  for(;j<length;j++)
  {

   if(a[j]>a[j+1])
   {
    int temp=a[j];
    a[j]=a[j+1];
    a[j+1]=temp;

   }

  }
  length--;
  j=0;
 }


}

 

快速排序:

定义:将要排序的数组分成两块,其中一块的每一个数都小于另一块中的每一个数。

方法:1 取第一个数作为标准

           2 从数组的最后面开始,将最后一个数和标准(第一个数)对比,大于标准,取倒数第二个数和标准对比,一次类推,若小于标准将标准和该数交换。

           3 从前面第二个数开始,与标准比较,大于标准,交换,否则一直向下找。

           4 当从后面的数和从前面的数相等的时候,第一趟排序完成。

           5 利用递归,完成剩下的排序。

 

代码:

void quick(int a[],int orign,int length)
{

    if(orign>=length)
    {
        return;
    }
    int temp=a[orign];
    int lengthnum=length;
    int i=orign;
    while(i!=lengthnum)
    {
        while(a[i]<a[lengthnum]&&i<lengthnum)
        {
            lengthnum--;
        }
        if(i<lengthnum)
        {
            int temp=a[i];
            a[i]=a[lengthnum];
            a[lengthnum]=temp;
            i++;
        }

        while(a[lengthnum]>a[i]&&i<lengthnum)
        {
            i++;
        }
        if(i<lengthnum)
        {
            int temp=a[i];
            a[i]=a[lengthnum];
            a[lengthnum]=temp;
            lengthnum--;
        }

    }
    quick(a,0,i-1);
    quick(a,lengthnum+1,length);
}

 

第一篇文章不详细,表述不准确。但是代码无误。有疑问可留言,呵呵,大家都比我懂。恳请指错,优化。

本人急躁,要忙于实习复习,望见者体谅。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值