【Java】數組實例--自動排序


代碼


public class NumSort{
public static void main(String args[]){
int[] a= new int[args.length];
for(int i=0; i<args.length; i++){
a[i] = Integer.parseInt(args[i]); //數據類轉換:String類型轉換成Int類型。捕獲輸入的數據給數組a賦值
}
print(a);
selectionSort(a); //為捕獲的數據排序
print(a);
}

private static void selectionSort(int[] a){
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;
}
}
}
}

private static void print(int[] a){
for(int i=0; i<a.length; i++){
System.out.print(a[i] + " ");
}
System.out.println();
}
}

效果圖



排序算法優化


Better :減少數據交換次數。


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;
}
}

之前的算法是比一次交換一次,這個算法是比出最小值才交換一次。

Perfect :減少分配空間次數


int k,temp;
for(int i=0; i<a.length; i++){
k = i;
for(int j=k+1; j<a.length; j++){
if(a[j] < a [k]){
k = j;
}
}
if(k != i){
temp = a[i];
a[i] = a[k];
a[k] = temp;
}
}

內存分析:局部變量在棧中占一塊內存,需先聲明(不同的變量類型分配不同的長度,決定程序運行中占內存的大小),再賦值,才能使用,出瞭作用域自動釋放空間。將k和temp放在for循環外面聲明,減少瞭重復分配空間的次數。

0 個評論

要回覆文章請先登錄註冊