1. 选择排序法
排序原理:每一次排序,选择未被排序的第一个元素的索引值,依次和后面的数比较,如果比后面的数大,则交换索引值, 当第i轮比较结束后,判断当前索引值时候发生改变,如果发生改变,则说明存更小的元素,那么就交换 //注意:每次交换得到的最大或最小值都是放在前面的(从前往后排序,和冒泡正好相反)第一个for:为什么要-1(也可以不-1),因为轮到倒数第二个数的时候,排序就完成了,而且最后一个数也是和自己比较,所以即省略了
int min;
fot(int i=0;i<arr.length;i++){
//为什么min=i?将第i个数的索引值给min,
//为什么不是i前面的数??因为i前面的数已经排序好了+
min=i;
//为什么是i+1?因为要用arr[i]的下一个元素逐一和arr[i]比较
//为什么是arr.length-1e而不是arr.length 因为由n个数只需要比较n-1次
for(int j=i+1;j<arr.length-1;j++){
if(arr[min]>arr[j]){
min=j;
}
}
if(min!=i){
int temp=arr[min];
arr[min]=arr[i];
arr[j]=temp;
}
}
在这里插入代码片
2. 冒泡排序法
排序原理:冒泡排序,顾名思义,就像水里的气泡,大的气泡先冒出来,小的气泡再最下面。
有5个数的无序数组,所以需要进行4次(n-1)重新排序, 每次重新排序,是将第一位置的数与其后一位的数进行值的比较,如果后值大于前值则将其换位,然后在将第二位置的数与其后一位的数进行值的比较,以此类推,直到最后一个数进行比较后,此时不难发现最后一个数必定是这组数组中最大的数,第一次重新排序结束。
进行第二次重新排序,同第一次原理相同,因为最后一位数已经是本数组中最大的数,所以不再进行比较,因此只需进行13次(n-2)比较,当第二次重新排序结束时,最后两位则是数组中最大的两个数。以此类推,最后一次只需要进行一次比较,则整个数组完成排序。
总结:对于一个具有n个数值的无序数组,需要进行(n-1)次重新排序,每次排序需进行(n-i)次比较。(i为重新排序的次数)~
System.out.print("冒泡排序法:");
int temp;
/*我的错误for (int i = 0 i < arr.length; i++)*/
// for (int i = 1; i < arr.length; i++) {/
//每次重新排序,是将第一位置的数与其后一位的数进行值的比较,
for (int j = 0; j <arr.length-i ; j++) {
if(arr[j]>arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
for (int i = 0; i <arr.length ; i++) {
System.out.print(arr[i]+" ");
}
}//冒泡排序法