原理:每一次查找出未排序数组中最大(或最小)的值,直至全部排序完。
时间复杂度:O(n^2) (推算过程见下方)
稳定性:稳定
代码实现(从小到大输出):
public static void main(String[] args){
int[] a={1,4,9,8,7,5,3,0,2,6};
for(int i=0;i<a.length;i++){
for(int j=i+1;j<a.length;j++){
if(a[i]>a[j]){
int m=0;
m=a[i];
a[i]=a[j];
a[j]=m;
}
}
}
//输出排序后的数组(使用的是lambda表达式输出,也可以使用for循环输出)
Arrays.stream(a).forEach(System.out::println);
//for循环输出
/*
for(int m=0;m<a.length;m++){
System.out.println(a[m]);
}
*/
}
输出结果:
时间复杂度计算:
假设数组有n个数据,第一次循环需要进行(n-1)次交换,第二次需要进行(n-2)次交换,…最后一轮要进行1次交换,因此完成一次排序最坏情况要进行(n-1)+(n-2)+(n-3)+…+2+1次交换,即n*(n-1)/2,所以时间复杂度为O(n^2)