demo001.冒泡排序

/**
 * 冒泡排序:C 语言
 *
 */
#include <stdio.h>

// 数组长度
#define LENGTH(array) ( (sizeof(array)) / (sizeof(array[0])) )
// 交互数值
#define swap(a,b)    (a^=b,b^=a,a^=b)

/*
 * 冒泡排序
 *
 * 参数说明:
 *     a -- 待排序的数组
 *     n -- 数组的长度
 */
//经典冒泡排序
void sort_bubble(int* a,int len)
{
 int i, j;
 int temp;
 for (i = 0; i < len - 1; i++)
 {
  for (j = 0; j < len - 1 - i; j++)
  {
   if (a[j] > a[j + 1])
   {
    temp = a[j];
    a[j] = a[j + 1];
    a[j + 1] = temp;
   }
  }
 }
}
//冒泡排序C实现二
//观察上面冒泡排序的流程图,第3趟排序之后,数据已经是有序的了;第4趟和第5趟并没有进行数据交换。
//下面我们对冒泡排序进行优化,使它效率更高一些:添加一个标记,如果一趟遍历中发生了交换,则标记为true,否则为false。如果某一趟没有发生交换,说明排序已经完成!
void sort_bubble_1(int* a, int len)
{
 int i, j;
 int temp;
 int flag;
 for (i = 0; i < len - 1; i++)
 {
  for (j = 0; j < len - 1 - i; j++)
  {
   flag = 0;
   if (a[j] > a[j + 1])
   {
    temp = a[j];
    a[j] = a[j + 1];
    a[j + 1] = temp;
    flag = 1;
   } 
  }
  if (!flag)
   break;
 }
}
void main()
{
    int i;
    int a[] = {20,40,30,10,60,50};
    int ilen = LENGTH(a);

    printf("before sort:");
    for (i=0; i<ilen; i++)
        printf("%d ", a[i]);
    printf("\n");

    sort_bubble_1(a, ilen);
    //sort_bubble(a, ilen);

    printf("after  sort:");
    for (i=0; i<ilen; i++)
        printf("%d ", a[i]);
    printf("\n");
}

 出处:http://www.cnblogs.com/skywang12345/p/3596232.html

转载于:https://www.cnblogs.com/freyluo/p/11171265.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值