黑马程序员技术交流社区

标题: 素组排序---选择排序 [打印本页]

作者: 403295277    时间: 2015-9-1 22:10
标题: 素组排序---选择排序

#include <stdio.h>

int main(int argc, const char * argv[]) {
    int arr[10]={4,1,222,344,44,55,64,7,899,911};
    //求数组的长度
    int len = sizeof(arr)/sizeof(int);
    printf("--数组排序前--\n");
    for (int i=0; i<len; i++) {
        printf("%d\t",arr);

    }

    printf("\n---排序过程进行中---\n");

    //定义交换数组的媒介
    int temp = 0;
    int indexNum = 0;

    //定义用来存放最小数组元素
    int min = 0;
    //设置标志,0标示没有找到应该交换的对象
    int flag = 0;

    for (int i=0; i<len-1; i++) {
        //第 i 次寻找最小数
        // 假定每次都是i个数为最小数
        min = arr;
        printf("第%d次比较,假定最小值:a[%d]=%d\n",i+1,i,arr);

        printf("剩余比较的元素:");
        for (int j=i+1; j<10; j++) {

            //遍历数组,寻找最小数
            if (min>arr[j]) {
                min = arr[j];
                //设定交换数组元素下标标志
                indexNum = j;
                //设定已经查找到最小数组元素标志(1标示找到最小值)
                flag = 1;
            }

            printf("arr[%d]=%d\t",j,arr[j]);
        }
        printf("\n");

        //最小值与假定值交换
        if (flag==1) {
            temp = arr;
            arr = arr[indexNum];
            arr[indexNum] = temp;
        }

        //复位循环标志
        flag = 0;


        printf("筛选最小值:arr[%d]=%d\t",i,arr);
        printf("\n\n");

        //把下标标志清零
        indexNum = 0;
    }
    printf("\n--数组排序后--\n");
    for (int i=0; i<10; i++) {
        printf("%d\t",arr);

    }
    printf("\n");

    return 0;
}






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