A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

// 冒泡排序之升序排序
/*
假设有N个数,那么相邻的2个数就有N-1对,依次比较N-1对的大小即可把最大的元素放到最后(相邻的

两个元素比较,如果第一个比第二个大,就交换他们两个),此时最后一个元素已经是最大了,那么还

有N-1个数需要排列,此时需要比较的相邻2个数有N-2对,一次比较剩下的N-2对的大小即可把第二大的

元素放到倒数第二位置,以此类推....

示例代码排列过程
51 56 24 12
51 24 56 12   
51 24 12 56
       
24 51 12 56
24 12 51 56

12 24 51 56

*/



#include<stdio.h>
#define kLength 4 //定义数组长度
int main()
{
    int number[4]={56,51,24,12};
    int i,j,temp;
    for(j=0;j<kLength -1;j++)
        for(i=0;i<kLength -1-j;i++)
        {
            if(a[i]>a[i+1])//数组元素大小按升序排列
            {
                temp=a[i];
                a[i]=a[i+1];
                a[i+1]=temp;
            }
        }
    for(i=0;i<kLength ;i++)
    {
        printf("%d",number[i]);
    }
    printf("\n");
    return 0;
}

// 简单选择排序
第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]~r[n]

中选出最小的记录,将它与r[2]交换;以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将

它与r[i]交换,使有序序列不断增长直到全部排序完毕
/*示例代码排列过程:
index初始值0 循环判断(从元素下标1到3遍历)最小记录后index=3     if ( index!=i) 成立,进行

交换  数组经过排序后        12 51 24 56
index初始值1 循环判断(从元素下标2到3遍历)最小记录后index=2    if ( index!=i) 成立,进行

交换   数组经过排序后还是 12 24 51 56(已经排序完毕,但是程序任然往下执行)
index初始值2 循环判断(从元素下标3到3遍历)最小记录后index=2    if ( index!=i) 不成立,不

进行交换  ,此时排序完毕   数组经过排序后12 51 24 56

*/
#include<stdio.h>
#define kLength 4 //定义数组长度
int main()
{
    int number[4]={56,51,24,12};
    int i,j,temp;
    for ( i=0 ; i< kLength -1 ; i++) //n-1趟排序   
   {
        int index=i; //假设index是最小值记录的位置
        for ( j=i+1 ; j < kLength ; j++)  //查找最小记录的位置
        if (number[j]< number[index] ){   
        index=j;
        }
        if ( index!=i)  //若无序区第一个元素不是无序区中最小元素,则进行交换
        { temp= r[i]; r[i]= r[index]; r[index]=temp; } //利用temp作为临时空间,两个值交

换的桥梁
}

    return 0;
}

3 个回复

倒序浏览
这两个尤其是冒泡,考试容易考哦
回复 使用道具 举报
加油吧!
回复 使用道具 举报
冒泡跟选择应该是俩层for循环的差别吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马