黑马程序员技术交流社区

标题: 数组排序之选择与冒泡排序 [打印本页]

作者: daitoudainaoali    时间: 2015-11-7 02:26
标题: 数组排序之选择与冒泡排序
/*
*选择排序
*/
#include <stdio.h>
int main()
{
    //要排序的数组
    int a[] = {1,2,4,3,8,5};
    //最大值的脚标
    int tempIndexMax = 0;
    for(int i = 0; i<5 ; i++)//第几轮排序
    {
        int tempIndexMax = i;
        for(int j = i+1; j<6;j++)//当前这轮排序的具体实现
        {
            if(a[tempIndexMax]<a[j])//a[j]是否大于先前的"最大值"
            {
                tempIndexMax=j; //如果a[j]大于先前"最大值",改变"最大值的脚标"
            }
        }
        //输出每轮排序的最大值脚标
        printf("第%d轮排序的最大值脚标是%d\n",i,tempIndexMax);
        //把找到的最大值和之前的最大值互换
        int temp = a[i];
        a[i]=a[tempIndexMax];
        a[tempIndexMax] = temp;
    }
    for(int k = 0; k<6 ;k++)
    {
        printf("%d\t",a[k]);
    }
}
/*
*冒泡排序
*/
#include <stdio.h>
int main()
{
    int a[] = {1,2,4,3,8,5};
    //数组总共有多少元素
    int n = (sizeof a)/(sizeof (int));//n=24/4=6
    //定义一个中间变量用于交换数据
    int t=0;
    // 要进行n-1轮排序(从i=0到i=n-2,i=0,1,2,3,4)
    for(int i = 0;i<n-1;i++)//i<6-1=5,i=0,1,2,3,4,5
    {
        for(int j=0;j<n-1-i;j++)//j<5-i,j=0,1,2,3,4,5
        {
            if(a[j]<a[j+1])
            {
                t = a[j];
                a[j] = a[j+1];
                a[j+1] = t;
            }
        }
    }
    for(int k=0;k<n;k++)
    {
        printf("%d\t",a[k]);
    }
}








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2