冒泡排序
相邻两元素比较,较大的靠后排,直到元素从前到后由小到大排列
import java.util.Arrays;
public class sort1 {
/*
冒泡排序
每次取出相邻两个元素比较将较大的元素向后移动,
每一趟找了一个最大值放到最后
最后结果是从前到后元素由小到大排列
*/
/* public static void main(String[] args) {
int[] a = {5,4,3,2,1};
for (int i=0;i<a.length-1;i++){//循环4趟
for (int j=0;j<a.length-1-i;j++){//防止a[j]>a[j+1]越界,每次最后一位不用再比
if(a[j]>a[j+1]){
int t = a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
System.out.println(Arrays.toString(a));
}*/
这是初始算法,下面是优化之后减少无意义比较和排序的算法
public static void main(String[] args) {
int[]a = {3,5,4,1,2,8,6,9};
for (int i = 0;i<a.length;i++){//for(int i=0;i<a.length-1;i++)
for (int j=0;j<a.length-1;j++){//for(int j=0;j<a.length-1-i;j++) 减少无意义的比较和排序次数
if (a[j]>a[j+1]){
int b = a[j];//交换位置
a[j] = a[j+1];
a[j+1] = b;
}
}
}
System.out.println(Arrays.toString(a));
}
}
选择排序
从第一个元素开始与后面的元素比较,若后边的元素大,则两者交换位置
最后结果是所有元素从前到后由大到小
import java.util.Arrays;
public class sort2 {
/*
选择排序
假设从第一个元素开始与后面的每一个元素比较
如果后面的元素大于第一个元素,则交换两者位置
*/
//循环次数过多,每次都交换较小元素的位置
/*
public static void main(String[] args) {
*/
/* int[] a = {3,1,2,5,4};
for (int i=0;i<a.length-1;i++){
for (int j=i+1;j<a.length;j++){
if (a[i]>a[j]){
int b = a[i];//交换位置
a[i]=a[j];
a[j]=b;
}
}
}*/
/* System.out.println(Arrays.toString(a));*/
//利用索引简化代码,直至内层循环结束后再交换位置
public static void main(String[] args) {
int [] n = {9,4,3,7,5,2,6,1};
for (int i =0;i<n.length-1;i++){
int m=i;
for (int j =i+1;j<n.length;j++){
if (n[m]>n[j]){
m=j;
}
int x = n[m];
n[m] = n[i];
n[i] = x;
}
}
System.out.println(Arrays.toString(n));
}
}