黑马程序员技术交流社区
标题:
毕老师的这道选择排序看不懂,给出此源代码,求讲解
[打印本页]
作者:
夜hen冷
时间:
2014-11-14 18:49
标题:
毕老师的这道选择排序看不懂,给出此源代码,求讲解
import java.util.*;
/*
对给定数组进行排序。
{5,1,6,4,2,8,9}
*/
class ArrayTest2
{
/*
选择排序。
内循环结束一次,最值出现头角标位置上。
*/
public static void selectSort(int[] arr)
{
for (int x=0; x<arr.length-1 ; x++)
{
for(int y=x+1; y<arr.length; y++)
{
if(arr[x]>arr[y])
{
/*
int temp = arr[x];
arr[x] = arr[y];
arr[y]= temp;
*/
swap(arr,x,y);
}
}
}
}
/*
冒泡排序
*/
public static void bubbleSort(int[] arr)
{
for(int x=0; x<arr.length-1; x++)
{
for(int y=0; y<arr.length-x-1; y++)//-x:让每一次比较的元素减少,-1:避免角标越界。
{
if(arr[y]<arr[y+1])
{
/*
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
*/
swap(arr,y,y+1);
}
}
}
}
/*
发现无论什么排序。都需要对满足条件的元素进行位置置换。
所以可以把这部分相同的代码提取出来,单独封装成一个函数。
*/
public static void swap(int[] arr,int a,int b)
{
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
public static void main(String[] args)
{
int[] arr = {5,1,6,4,2,8,9};
//排序前;
printArray(arr);
//排序
//selectSort(arr);
//bubbleSort(arr);
//Arrays.sort(arr);//java中已经定义好的一种排序方式。开发中,对数组排序。要使用该句代码。
//排序后:
printArray(arr);
}
public static void printArray(int[] arr)
{
System.out.print("[");
for(int x=0; x<arr.length; x++)
{
if(x!=arr.length-1)
System.out.print(arr[x]+", ");
else
System.out.println(arr[x]+"]");
}
}
}
作者:
王燕飞
时间:
2014-11-14 20:40
哪里不懂?
作者:
暴君
时间:
2014-11-14 20:50
你是说那个x和y选择排序,还有冒泡排序,for里面的问题么?
如果是x和y的选择排序,那么就是相邻两个数组的比较,从比如说第一个arr[0],它要从arr[1]开始,一直往后比,这种方法,基本上要和每一个数组比一下。
冒泡算法:外循环表示有多少个数,比多少次,这个明白吧,内循环减少,是因为,最大的那个数已经在第一次排序的过程中,放到了最后的位置,那么既然第一次比较时,已经知道它最大了,就没必要再比,所以减一,依次类推,所以没比较一次,就要减少比较次数一次。
总的来说就是选择排序,相邻两项总是要比,冒泡,比较次数减少。
作者:
暴君
时间:
2014-11-14 20:52
额 ,表述有点问题
你就看第二个for循环,选择排序:第一个y=x+1,冒泡则是0,但是条件语句不同。
作者:
郑飞
时间:
2014-11-15 17:49
在纸上推吧 以后还会碰到复杂的排序的 必须自己动手
作者:
小朱
时间:
2014-11-15 18:14
不知道你那里不懂
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2