选择排序问题(编程新手)

问题描述

选择排序问题(编程新手)

这是我用java写的选择排序,对数组int[] arr={15,65,9,20,37,6,7,100,57,5,4,3,2,1,87};
进行排序,结果是[1,15,2,9,20,3,6,87,37,4,5,7,57,65,100],然后我把if判断换成注释后面的就好了,这里i每进入一次循环我并没有改变它的值,为什么得不到正确结果.我哪里出错了?

 public static void selectionSort(int[] a){
        int temp,min;
        for(int i=0;i<a.length-1;i++){
            min=i;
            for(int j=i+1;j<a.length;j++){
                if(a[j]<a[i])//a[j]<a[min]
                    min=j;
            }
            if(min!=i){
                temp=a[min];
                a[min]=a[i];
                a[i]=temp;
            }
        }
    }

解决方案

这显而易见
首先最小的值的索引是i (min=i;)
然后每个数字和它比,如果它更小,就让最小值的索引代替原来的min (min=j;)
因此你要和最小的比,而不是始终和第一个比(和a[min]比,而不是和a[i])
选择排序的思路是(注意 | ,代表了排序完成和没有完成的分界,也就是你的i)
|15,65,9,20,37,6,7,100,57,5,4,3,2,1,87
这是一开始的
1|65,9,20,37,6,7,100,57,5,4,3,2,15,87
这是第一趟
1,2|9,20,37,6,7,100,57,5,4,3,65,15,87
这是第二趟
然后是
1,2,3|20,37,6,7,100,57,5,4,9,65,15,87
1,2,3,4|37,6,7,100,57,5,20,9,65,15,87
1,2,3,4,5|6,7,100,57,37,20,9,65,15,87
1,2,3,4,5,6|7,100,57,37,20,9,65,15,87
1,2,3,4,5,6,7|100,57,37,20,9,65,15,87
1,2,3,4,5,6,7,9|57,37,20,100,65,15,87
1,2,3,4,5,6,7,9,15|37,20,100,65,57,87
1,2,3,4,5,6,7,9,15,20|37,100,65,57,87
1,2,3,4,5,6,7,9,15,20,37|100,65,57,87
1,2,3,4,5,6,7,9,15,20,37,57|65,100,87
1,2,3,4,5,6,7,9,15,20,37,57,65|100,87
1,2,3,4,5,6,7,9,15,20,37,57,65,87|100
1,2,3,4,5,6,7,9,15,20,37,57,65,87,100|

解决方案二:

额 最简单的排序 可以用冒泡排序 可以试试我这个:
public static void main(String[] args) {
int[] a={8,6,7,2,2,8,6,5,5,43,23,67};
int temp;
for (int i = 0; i < a.length; i++) {
for (int j = i; j < a.length; j++) {
if(a[i]<a[j]){
temp=a[i];
a[i]=a[j];
a[j]=temp;

            }
        }
        System.out.println(a[i]);
    }
}

解决方案三:

这样试试看,你括号问题把
public static void selectionSort(int[] a){
int temp,min;
for(int i=0;i<a.length-1;i++){
min=i;
for(int j=i+1;j<a.length;j++)
if(a[j]<a[i])//a[j]<a[min]
min=j;
if(min!=i){
temp=a[min];
a[min]=a[i];
a[i]=temp;
}
}

解决方案四:

找到了你自己还标注了

   if(a[j]<a[min])//a[j]<a[min]
时间: 2024-08-13 01:23:52

选择排序问题(编程新手)的相关文章

如何正确选择语言编程?

问题描述 如何正确选择语言编程? 像百度魔拍之类的.可以输入照片然后数据库反出结果的,要用什么语言编的程序啊? 解决方案 这个什么语言都支持查询数据库,C++, Java, C#

windows编程-windows 编程 新手问题

问题描述 windows 编程 新手问题 最近刚开始看windows 自学 就是想了解下,书中helloworld程序先注册了一个窗口类,然后写了一个窗口对象,再然后是消息的循环, 可是我没看懂窗口对象是怎么知道自己是属于这个窗口类的,并没有把窗口类的值赋给窗口对象啊, 消息也是,没看出这个消息与窗口是怎么建立关系的 求解答 解决方案 CreateWindow()的时候,可以指定窗口类

本人自学编程新手上路请问我的这个怎么错了

问题描述 本人自学编程新手上路请问我的这个怎么错了 解决方案 目测中英文不区分问题,在编程的时候切记切换为英文状态,而且最后一行应该是:printf("n"); 解决方案二: 第一个for循环中最后一个表达式怎么是1==,这是啥意思啊? 解决方案三: i==应该是i++吧,而且最后一行应该是:printf("n");

选择结构编程练习

问题描述 选择结构编程练习1.身高预测每个做父母的都关心自己孩子成人后的身高,据有关生理卫生知识与数理统计分析表明,影响小孩成人后身高的因素有遗传.饮食习惯与坚持体育锻炼等.小孩成人后的身高与其父母的身高和自身的性别密切相关.设faHeight为其父身高,moHeight为其母身高,身高预测公式为:男性成人时身高=(faHeight+moHeight)*0.54(cm)女性成人时身高=(faHeight*0.923+moHeight)/2(cm)此外,如果喜爱体育锻炼,那么可增加身高2%,如果有

c++-有没有能为编程新手答疑解惑的平台?

问题描述 有没有能为编程新手答疑解惑的平台? 本人自学C++,有时会碰到一些问题,所以想问有没有这样的平台存在? 解决方案 对的,一般很基础的就去问百度,比如一些语法.函数的用法等.如果是比较复杂的问题,或者直接是一个编程题目的话,就在CSDN论坛发帖或者来问答频道问 解决方案二: win32平台中的程序转换为wince中的一些错误 . 未能为"VCCLCompilerTool"工具生成命令行 解决方案三: 能举例吗?比如什么样的问题呢? 解决方案四: 特别新手的问题百度就可以了,百度

服务器-网络编程新手求指导---客户端为何write()始终返回0

问题描述 网络编程新手求指导---客户端为何write()始终返回0 在本机上做实验,客户端输入文字在服务器端显示 客户端 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <netdb.h> #include <sys/socket.h> #include <netinet/in.h> #include <errno.h> #inclu

选择Web编程还是WinForm编程? 用.net(c#)现在是都做,可是总感觉应该选择一个方向,到底是选择哪一样呢?

问题描述 选择Web编程还是WinForm编程?由于公司接的项目多,用.net(c#)现在是都做,可是总感觉应该选择一个方向,到底是选择哪一样呢?选择哪一个对将来的发展更有利???有点迷茫!!! 解决方案 解决方案二:哦,忘了说明一点了以前做的是WEB方面的,可到了公司后,有接触了winform方面,现在想确定一下,到底是往哪个方向走???解决方案三:对于未来不好确定,不过现在应该是做Web的多...解决方案四:web好像现在很热不过我是做winform的,呵呵解决方案五:很多人都说将来是网络的

阿里云ECS服务器配置怎么选择?(新手教程)

阿里云ECS服务器配置怎么选择? 购买前请先领取阿里云幸运券 随机优惠还能百分百中奖小米电源一个! 阿里云ECS服务器节点问题   选择青岛节点还是杭州节点? 阿里云节点地区所对应的城市如下,华北地区:北京,天津,河北,山西,内蒙古. 华东地区:上海,江苏,浙江,山东,安徽,华南地区:广东,广西,海南,福建 杭州节点 是属于华东地区拓扑 ,青岛节点 是属于华北地区拓扑 .如果你网站访问者大部分来自华北 那还是选择青岛,相反就选择杭州! 如果没有自己上方没有自己所在的地区 那么我们就近选择节点,丝

游戏编程-新手问题opengl贴不上图片

问题描述 新手问题opengl贴不上图片 这是源码,在一个旋转的正方体上贴图,结果整个正方体变成了白色的 #include #include #include #include using namespace std; //纹理数组 GLuint texture[1]; float _angle=0.0f; AUX_RGBImageRec *LoadBMP(char *Filename) { FILE *file=NULL; if(!Filename) { return NULL; } file