今天突发奇想想写一个关于算法的文章,然后就从最简单,基础的选择排序开始吧!
实现原理:
选择排序是将数组中最小数的下表记录起来,然后在根据下标将最小的数和第一个数换一下位置。
总代码:
public static void main(String[] args) {
int [] intArr = {5,6,1,2,3,4,8,7,9};
for (int j = 0; j < intArr.length-1; j++) {
int minIndex = j;
for (int i = j+1; i < intArr.length; i++) {
if (intArr[minIndex]>intArr[i]){
minIndex = i;
}
}
int temp = intArr[j];
intArr[j] = intArr[minIndex];
intArr[minIndex] = temp;
System.out.println("minIndex:"+minIndex);
}
for (int i = 0; i < intArr.length; i++) {
System.out.print(intArr[i]+" ");
}
}
讲解:首先我们先把代码拆分成三部分实现
- 我们先从数组中的第一位数值开始。找到数组中数值最小的下标,并将最小的数放到第一位。
public static void main(String[] args) {
int [] intArr = {5,6,1,2,3,4,8,7,9};
int minIndex = 0;
for (int i = 1; i < intArr.length; i++) {
if (intArr[minIndex]>intArr[i]){
minIndex = i;
}
}
System.out.println("minIndex:"+minIndex);
for (int i = 0; i < intArr.length; i++) {
System.out.print(intArr[i]+" ");
}
}
最小的数的下表我们已经找到了,然后第二部将最小的数值放到第一位
public static void main(String[] args) {
int [] intArr = {5,6,1,2,3,4,8,7,9};
int minIndex = 0;
for (int i = 1; i < intArr.length; i++) {
if (intArr[minIndex]>intArr[i]){
minIndex = i;
}
}
int temp = intArr[0];
intArr[0] = intArr[minIndex];
intArr[minIndex] = temp;
System.out.println("minIndex:"+minIndex);
for (int i = 0; i < intArr.length; i++) {
System.out.print(intArr[i]+" ");
}
}
现在我们已经把最小的数放到了数组的第一位,现在我们开始循环其他的数,怎么将其他的数也相应的进行排序哪?
思路,我要想将其他的数也进行排序那首先我应该去循环他们,然后比较他们的大小。所以我在上一步的基础上在上一步的循环外面加了一层循环。让每个数值都去对比一边。
总体代码讲解:
现在的minIndex不能是0了。应该是最外层循环的次数。内循环的开始下标也应该是外循环加1开始本次内循环。这个为什么要这样那?我不知道改怎么组织语言给你讲。你自己打个debug一步一步的看看吧。
最后说的是“intArr.length-1”这个是因为当循环到倒数第一位的时候,这个时候就没必要将他和他自己进行比较了。
public static void main(String[] args) {
int [] intArr = {5,6,1,2,3,4,8,7,9};
for (int j = 0; j < intArr.length-1; j++) {
int minIndex = j;
for (int i = j+1; i < intArr.length; i++) {
if (intArr[minIndex]>intArr[i]){
minIndex = i;
}
}
int temp = intArr[j];
intArr[j] = intArr[minIndex];
intArr[minIndex] = temp;
System.out.println("minIndex:"+minIndex);
}
for (int i = 0; i < intArr.length; i++) {
System.out.print(intArr[i]+" ");
}
}