下面两排序算法哪个效率高?请详细分析一下哈~~class PaiXu{
public static void main(String[] args){
int[] a= {4,6,2,7,8,9,1,3,0,5};
//算法一
/*for(int i=0;i<a.length;i++){
for(int j=i+1;j<a.length;j++){
if(a[j]<a[i]){
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}*/
//算法二
for(int i=0;i<a.length;i++){
int k=i;
for(int j=k+1;j<a.length;j++){
if(a[j]<a[k]){
k=j;
}
}
if(k!=i){
int temp=a[i];
a[i]=a[k];
a[k]=temp;
}
System.out.print(" "+a[i]);
}
}
}
public static void main(String[] args){
int[] a= {4,6,2,7,8,9,1,3,0,5};
//算法一
/*for(int i=0;i<a.length;i++){
for(int j=i+1;j<a.length;j++){
if(a[j]<a[i]){
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}*/
//算法二
for(int i=0;i<a.length;i++){
int k=i;
for(int j=k+1;j<a.length;j++){
if(a[j]<a[k]){
k=j;
}
}
if(k!=i){
int temp=a[i];
a[i]=a[k];
a[k]=temp;
}
System.out.print(" "+a[i]);
}
}
}
算法1频繁SWAP数据,而算法2只是先记录最小值的序号,最好才SWAP一次
从时间复杂度上,两者都一个级别的,是O(n^2).具体是:连加号(下面是i=1,上面是n)i,就是从1加到n.
但如果具体到一组数,所需时间就有可能不一样.正如4楼所说的.
其实选择排序就是冒泡的一种优化来的.
从时间复杂度上,两者都一个级别的,是O(n^2).具体是:连加号(下面是i=1,上面是n)i,就是从1加到n.