冒泡排序
冒泡排序核心是相邻俩个元素俩俩进行比较。
for(int i=0;i<a.length-1;i++) {
for(int j=0;j<a.length-i-1;j++) {
if(a[j]>a[j+1]) {
a[j]=a[j+1]+a[j];
a[j+1]=a[j]-a[j+1];
a[j]=a[j]-a[j+1];
}
}
}
外层循环数组长度a.length-1的意思是,例;数组中有6个数,只需要比较五次即可。
冒泡排序第一轮循环时,就比出了一个最大值,所以第二轮循环就没必要再和最后那个最大的数在比。
所以第二轮循环时,内层循环就需要减1,依次再减,所以内层循环比较次数就是数组长度-i-1;
if中的代码块是用来数做交换用的。举例:a=5;b=6;
a=a+b; 现在a的值就是11,然后再b=a-b;相当于b=11-6=5;现在b的值就是5,然后在a=a-b; a=11-5=6;这样就可以不借用第三方,就可以完成数的交换。
选择排序
选择排序的意思就是说,拿数组的第一个数,依次和数组中后面的每个数做比较,当做升序的时候,第一个数和后面数比较,只要大于后面的那个数,就和那个数的值进行交换,这样做完外层第一轮循环时,数组的第一个数必是最小的。`
for(int i=0;i<a.length-1;i++) {
for(int j=i+1;j<a.length;j++) {
if(a[i]>a[j]) {
a[i]=a[j]+a[i];
a[j]=a[i]-a[j];
a[i]=a[i]-a[j];
}
}
}
外层循环数组的每一个数,内层循环是和每个没有被比较的数做比较,所以内层循环的变量j,要在外层循环循环一次的时候,j的值加一,所以将j的值初始化成j=i+1;i+1的意思是,第一次循环时数组的第0个元素不用再和自己比较一次。