有没有大神看一下代码,看的出是一个排序用的,但是最近才接触编程逻辑很混乱,能不能帮忙一步步分析一下?

public class sortClass {

public static void sort(int[] data) {
        for(int j = 0; j<data.length - 1; j++) {
            int m=j ;
            for (int k = j + 1; k < data.length; k++) {
                if (data[k]< data[m]) {           
                m= k;
                /*compare values*/
                }
            }
                /*Assign to temp*/
            int temp = data[m];           
            data[m] = data[j];
            data[j] = temp;

        }
    }
    public static void main(String[] args) {
        int []  a   = {6,3,2,5,4,1};
        sort(a);

    }

}

2个回答

public class sortClass {

public static void sort(int[] data) {
        for(int j = 0; j<data.length - 1; j++) {//循环n次,比如代码里a有6个数,这就循环6次
            int m=j ;                                         //m用来记录从第j个数开始往后所有数中最小的数的索引,也就是index,
            for (int k = j + 1; k < data.length; k++) {//对于每一个j,循环n-1次,比如j循环6次,那这个内循环就循环6*(6-1)次
                                if (data[k]< data[m]) {                //判断从第j个数后面所有数字是否小于第j个数           
                                        m= k;                                     //如果第j个数后面的数比较小,那就记录这个较小的数的引索
                /*compare values*/
                }
            }                                                      //内层循环到这结束,目的在于找到第j个数后面,最小的数的引索
                /*Assign to temp*/
                         //找到后面最小的数,那就可以交换两个数,这样,小的就在前,大的就在后了。以下三句实现了交换这两个数的功能。           
                        int temp = data[m];                     //用temp记录 data[m]的值,也就是较小的值
            data[m] = data[j];                        //data[m]的值被temp存下了,那它现在就可以存较大的数,以实现交换,于是存 data[j]
            data[j] = temp;                            //data[j]原来的值已经给data[m],那现在就可以存较小的值了,于是存了temp

        }
    }
        //外层循环在这结束。为啥要外层循环呢?
        //因为,内层循环只能实现从某一个数开始,找到后面最小值,并把他俩交换。那就需要在一层循环,把这个操作套用到所有的值上。
        //于是所有的值都取找它后面最小值并与其交换。这样就实现了排序
    public static void main(String[] args) {
        int []  a   = {6,3,2,5,4,1};
        sort(a);

    }
}

你使用的这个排序方法是:
先将数组中的第一个元素取出,与第一个元素后面的数据进行比较(你这个是从小到大的排序方法),与数组后面的数据进行比较,将最小的数据放在第一个(data[0]),r
然后依次类推,取第二个数据与后面的比较,将倒数第二小的数据放在data[1]上,一直这样,数据变的有序。
public class sortClass {
public static void sort(int[] data) {
for(int j = 0; j<data.length - 1; j++) //这边数组的大小data.length-1,是防止后面的k中j-1超出数据上界
{
int m=j ;
for (int k = j + 1; k < data.length; k++) //这里是将上面数组中取出的数据的数据与其后面的数据进行比较
{
if (data[k]< data[m])
{

m= k;
/*compare values*/
}
}
/*Assign to temp*/
//当比较结束后将数组中的数据进行交换
int temp = data[m];

data[m] = data[j];
data[j] = temp;

    }
}
public static void main(String[] args) {
    int []  a   = {6,3,2,5,4,1};
    sort(a);

}

}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!