数组的概念:同一种数据类型的聚合,其实数组时一个容器,自动给数组中的元素从0开始编号,方便操作这些元素;
数组的定义格式:元素类型[] 数组名 = new 元素类型[元素个数/数组长度];其实这是一个赋值语句,将new在堆内存中开辟的一个容器空间的地址值赋值给栈内存中的数组变量“数组名”,[]代表数组类型。栈内存跟堆内存的区别:栈内存中的数据,用完就删除了,释放栈内存空间,而堆内存直至被视为垃圾,会不定时的启动垃圾回收机制,将垃圾清除:java跟c++的区别:java对内存进行了优化,c++需程序员手动启动某功能来清除内存中不被使用的实体。
数组的应用之选择排序:
class MyBoKe
{
/*{5,1,6,4,2,8,9}排序并输出*
分析:
1、该功能没有返回值;
2、不需要未知内容参与;
*/
/*我自己的思路:
1、内循环一次找出该数组的最小值,并将其赋值给另一个数组(容器);
2、外循环结束,输出容器数组中的元素;
*/
public static void selectSort(int[] arr)
{
int[] myArray = new int[arr.length];
int num =0;
for(int i=0;i<arr.length;i++)
{
int min = arr[i];
for(int j=i;j<arr.length;j++)
{
if(arr[j]<min)
{
num = arr[j];
arr[j] = min;
min = num;
}
}
myArray[i] = min;
}
for(int i=0;i<arr.length;i++)
{
System.out.print(myArray[i]);
}
}
//老师的方法
public static void selectSortT(int[] arr)
{
//int num = arr[0],num1 = 0;
for(int i=0;i<arr.length-1;i++)
{
for(int j=i+1;j<arr.length;j++)
{
if(arr[i]>arr[j])
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
for(int i=0;i<arr.length;i++)
{
System.out.print(arr[i]);
}
}
public static void main(String[] args)
{
int[] arr = {5,1,6,4,2,8,9};
selectSort(arr);
System.out.println();
selectSortT(arr);
}
}
运行的结果:
对同一数组进行选择排序,运行结果不一样的原因:早用我自己的方法对数组排序的时候,我就把数组的元素改变了,所以出现了此现象;这是数组在内存中的特殊性,在调用函数的时候,虽然只将数组传到功能函数中,功能结束没有返回值,但是将数组传给功能函数,其实是将数组在堆内存中的地址值传给了功能函数,所以功能函数虽然没有返回值,但是改变了堆内存中的数组。