------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、选择排序
-
排序原理:首先将第一个角标标记为最小数,其角标位置为最大数的位置;然后使用第一个数和剩下的数依次比较,若剩下的数小于第一个数,则交换这两个角标的数,依次比较下去,就会把最小数交换到第一位。之后将第二个数与后面的数进行依次比较就会比较出第二个最小数,依次类推就可以完成升序排序,反之比较最大数即为降序排序。
-
代码思路:首先每次比较出一个数后进行下次比较时将减少一个数,这时可以设计出一个外循环for()进行此操作,之后具体数字的比较可以设计一个for()循环进行每一个数与后面数的依次比较。实现此内外嵌套循环即可完成此排序
- 举例:完成数组arr[]={12,17,4,66,45}的降序排序,代码如下:
package xiaobing.java.day04;
public class ArryDemo01 {
public static void arrySort(int[] a){
//定义外循环,进入内循环时依次选择角标对应的数,到最后一个数时不需要比较所以x-1
for(int x=0;x<a.length-1;x++){
//定义内循环,进行具体比较,由于第一个数不需要和第一个数比较所以y=1,
for(int y=x+1;y<a.length;y++){
//比较之后的数字交换
if(a[x]<a[y]){
int c;
c=a[x];
a[x]=a[y];
a[y]=c;
}
}
}
}
public static void main(String[] args) {
int[] arr={12,17,4,66,45};
//排序前
printArr(arr);
//排序
arrySort(arr);
System.out.println();
//排序后
printArr(arr);
}
//定义遍历数组的方法
public static void printArr(int[] a){
System.out.print("[");
for(int x=0;x<a.length;x++){
if(x!=a.length-1)
System.out.print(a[x]+",");
else
System.out.print(a[x]+"]");
}
}
}
二、 冒泡排序
1.排序原理:将相邻的两个数进行比较,符合条件(大或者小)将最小数或最大数一直向右推,比较完第一次后最大数或者最小数就在最右边,下次比较只需要将剩下的数做同样的动作即可排序完成。
2.代码思路:外循环和选择排序一样,每次相邻数比较也是要进行length-1次;内循环即为前一个数y与后面的数y+1的比较。
3.举例:完成数组arr[]={12,17,4,66,45}的降序排序,代码如下:
public class ArryDemo02 {
public static void arrySort(int[] a){
//定义外循环,进入内循环时依次选择角标对应的数,到最后一个数时没有相邻比较所以x-1
for(int x=0;x<a.length-1;x++){
for(int y=0;y<a.length-x-1;y++){ //-x:每次比较的元素减少,-1:避免角标越界
if(a[y]<a[y+1]){
int c;
c=a[y];
a[y]=a[y+1];
a[y+1]=c;
}
}
}
}
public static void main(String[] args) {
int[] arr={12,17,4,66,45};
//排序前
printArr(arr);
//排序
arrySort(arr);
System.out.println();
//排序后
printArr(arr);
}
//定义遍历数组的方法
public static void printArr(int[] a){
System.out.print("[");
for(int x=0;x<a.length;x++){
if(x!=a.length-1)
System.out.print(a[x]+",");
else
System.out.print(a[x]+"]");
}
}
}