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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qq103613 中级黑马   /  2015-7-26 22:27  /  391 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

外层 len-1   里层  j=i+1  j<len
   
   
    int a[10]={23,12,4,67,20,100,21,45,3,28};
   
    假设a[0]为最小,分别与a[1] a[2] ... 比较,  在比较过程中,如果有元素的值比a[0]小,交换值

第一种方法
//每一趟都是拿着一个元素与后面其他元素进行比较,找出最小值
    void selectSort1(int array[],int len){
    // 1、确定需排序趟数
    for (int i = 0 ; i < len - 1; i++) { // 2、每一趟怎么处理
        
        for (int j = i + 1; j < len; j++) {
            
            if (array[i] > array[j]) {
               
            int temp = array[i];
               
                array[i] = array[j];
               
                array[j] = temp;
        }
        }
    }
}

第二种方法
void selectSort2(int arr[],int len){
    int temp;
    int min;
    for (int i=0; i<len - 1; i++) {
        //每次假设第arr[i]是最小值 min = i;
        min = i;
        for (int j=i+1; j<len; j++) {
            //找到最小的那个元素的下标
            if (arr[j]<arr[min]) min=j;
        }
        //如果没有找到比arr[i]小的,就不用交换 if(i!= min){
        //将第i个元素和最小的元素交换 temp=arr[i];
        temp = arr[i];
        
        arr[i]=arr[min];
        
        arr[min] = temp; }
}
//打印数组
for (int i=0; i<len; i++) {
    printf("%d\t",arr[i]); }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马