经典的冒泡排序——————黑暗总会过去,黎明终会到来!

£可爱£侵袭症+ 提交于 2020-01-06 15:18:11

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

//   原理:每次两个数进行比较,从数组的前两个元素开始,如果前面的数 > 后面的数,就交换
          第一轮会求出一个最大值,并且放在最后面,
        然后 依此类推,经过最多N-1轮,排序完成。

///////bubble_sort.c///

#include<stdio.h>
#define N 5
int main(int argc, const char *argv[])
{
    int a[N];
    int temp;//临时的中间变量
    int i,j;
    printf("请输入%d个数值:\n",N);
    for(i=0;i<N;i++)  
        scanf("%d",&a[i]);
    for(i=0;i<N-1;i++)//外循环控制比较轮次,n个数比较n-1轮.
    {
        for(j=0;j<N-1-i;j++)//内循环n个数两两比较,比较n-1-i次.
        {
            if(a[j]>a[j+1])//前一个数大于后一个数交换
            {
                temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            
            }
        }
    }

/*
     //利用做差思想,不借助中间变量交换值
     a[j]=a[j]-a[j+1];//保留差值
     a[j+1]=a[j+1]+a[j];//加差值
     a[j]=a[j+1]-a[j];//减差值
     //若不懂可以举例a=10;b=3;交换两个值一样的,方法一样。
     
    */

//遍历数组
    for(i=0;i<N;i++)
        printf("%d--<",a[i]);
    printf("\n");
    return 0;
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!