冒泡排序缺点:时刻比较,性能不好
冒泡排序特点:第一次循环结束,确定最大的在最后,以此类推
选择排序特点:第一次从R[0]~R[n-1]选最小值,与R[0]交换,以此类推
public class TextSort {
public static void main(String[] args) {
int[]
arrs={15,222,30,50,2,66};
System.out.println("排序前:");
for
(int i = 0; i < arrs.length; i++)
{
System.out.println(arrs[i]);
}
//选择排序
int out,in; //定义外层循环变量out和内层循环变量in
int min;
//定义最小值
for(out=0;out<arrs.length-1;out++){
//使用arrs.length-1 目的是不循环最后的数,
//因为子循环内,包含遍历最后一个数,省略一个判断步骤
min=out;
//假设最小数的索引为第out个
for(in=out+1;in<arrs.length;in++){
//内层循环从out+1开始
if(arrs[in]<arrs[min]){
//如果得到比arrs[min]还小的数
min=in;
//将比较小的数的索引,给min
}
}
if(min!=out){
//如果这个索引不是第out项(当前指定的最小数min=out)则交换,省略一个交换步骤
arrs[out]=arrs[out]+arrs[min];
//不用第三个变量实现交换
arrs[min]=arrs[out]-arrs[min];
arrs[out]=arrs[out]-arrs[min];
}
}
System.out.println("排序后:");
for
(int i = 0; i < arrs.length; i++)
{
System.out.println(arrs[i]);
}
}
}
--------------------------------------------
补充:
两个数值变换,不定义第三个变量,实现互换操作
int a=1;
int b=2;
a=a+b;
b=a-b; //获得a
a=a-b; //获得b
上述例子中:
可以不用min接收最小数
代码改为:
arrs[i]=arrs[i]+arrs[j];
arrs[j]=arrs[i]-arrs[j];
arrs[i]=arrs[i]-arrs[j];