public class SortUtil
{
public static void main(String args[]) {
int [] arr = new int[]{11,65,23,58,72,67,95,56,33}; //(2)
SortUtil st = new SortUtil();
st.selectionSort(arr);
System.out.println("选择排序为:");
System.out.println(Arrays.toString(arr)); //(1)
}
private void swap(int [] arr,int i,int j) {
int temp = arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
public int [] selectionSort(int[] arr) {
for(int i=0;i<arr.length;i++) {
for(int j=i+1;j<arr.length;j++) {
if(arr[i] < arr[j]) {
swap(arr,i,j);
}
}
}
return arr;
}
//为什么(1)这里的arr已经排序好了呢,方法selectionSort()不是只变更了局部的arr么,返回的arr还没获取这里已经变了...其实我要问的就是上面(2)处声明的arr数组的作用域..;另外怎样才可以变成局部的?
{
public static void main(String args[]) {
int [] arr = new int[]{11,65,23,58,72,67,95,56,33}; //(2)
SortUtil st = new SortUtil();
st.selectionSort(arr);
System.out.println("选择排序为:");
System.out.println(Arrays.toString(arr)); //(1)
}
private void swap(int [] arr,int i,int j) {
int temp = arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
public int [] selectionSort(int[] arr) {
for(int i=0;i<arr.length;i++) {
for(int j=i+1;j<arr.length;j++) {
if(arr[i] < arr[j]) {
swap(arr,i,j);
}
}
}
return arr;
}
//为什么(1)这里的arr已经排序好了呢,方法selectionSort()不是只变更了局部的arr么,返回的arr还没获取这里已经变了...其实我要问的就是上面(2)处声明的arr数组的作用域..;另外怎样才可以变成局部的?
(2)处的作用域除就是main方法的那个{}内部,但在执行main的时候,调用selectionSort方法时会临时保存现场去调用该函数,待调用返回后,在回到刚刚保存的现场继续执行,其实楼主问的问题跟作用域没有关系呀?
栈地址 堆内存
arr -----> {11,65,23,58,72,67,95,56,33} //main函数中arr
^ ^
| |
arr ---------- | //selectionSort方法中的 arr
arr --------------------- //swap 方法中的 arr楼主理解了吗?
{
public static void main(String args[]) {
int [] arr = new int[]{11,65,23,58,72,67,95,56,33}; //(2)
System.out.println(arr);
SortUtil st = new SortUtil();
st.selectionSort(arr);
System.out.println("选择排序为:");
System.out.println(Arrays.toString(arr)); //(1)
}
private void swap(int [] arr,int i,int j) {
System.out.println(arr);
int temp = arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
public int [] selectionSort(int[] arr) {
System.out.println(arr);
for(int i=0;i<arr.length;i++) {
for(int j=i+1;j<arr.length;j++) {
if(arr[i] < arr[j]) {
swap(arr,i,j);
}
}
}
return arr;
}
}看看地址,是一样的。