疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

关于Java数组以及两种简单排序算法


 

  关于数组的使用,我们要从其实例化和初始化说起,实例化的方法多种多样,掌握常用的几种方法就可以了,下面给几个一维数组的实例化对象:

  数据类型 [ ] 数组名 = new 数据类型[长度];

  数组名 = new 数据类型[长度];

  数组名 = new 数组类型[]{值,...};

  java数组在实例化过程中会给数组元素赋初值,像int的初值是0,string的初值是null,如果是自己定义的类,那是初值就是null,数组的的方法只有length,没有其他的方法,虽然java里面不能直接操作地址,但是不可否认数组名代表的是一个地址,所以在我们传参的时候可以直接传数组名,但这是对该数组进行操作的,使用时要多加注意,二维数组其实就是双重一维数组,事实上可以看做是一个矩阵,每一行或者每一列可以作为一个一维数组。

  数组在内存中是线性的连续的储存空间,以字节为单位,二维数组在内存中是一行一行存储的,这根C语言是一样的,据以上来说,数组的大小在实例化的时候就已经固定下来了,所以不可以在编译后输入数组的大小,因为也不可能编译通过,肯定会报错,还有对数组的操作过程中,要时刻注意一个数组越界问题,当抛出ArrayIndexOutOfBoundsException就代表数组越界,这是个很严重也很难察觉的问题,使用时要多加注意。

  下面来介绍几个简单的数组排序算法

  冒泡:

  Java代码

  public class Sort {

  public void sort(int[] data){ //定义两个参数,数组首地址与数组大小

  int temp;

  for(int i=0;i

  for(int j=data.length-1;j>i;j--){

  if(data[i]

  temp =data[i];

  data[i] = data[j];

  data[j] = temp;

  }

  for(int q=0;q

  System.out.print(data[q]+" "); //打印每一次排序后的序列

  }

  System.out.println(); //换行

  }

  }

  }

  冒泡排序的思想就是每一次循环遍历数组就找出一个最小的放在最前面,第一遍遍历把data[0]拿出来和后面的一个数比,如果后面的数小于data[0],则两个数交换,再用data[0]和后面的第二个数比,如果小于或者等于,则不动,继续往后比,直到最后一个数,这是就找到一个最小的数,然后从data[1]进行第二次遍历循环,一直到data.length-1次。

  快速排序

  Java代码

  class quicksort

  {

  public int data[];

  private int partition(int sortArray[],int low,int hight)

  {

  int key = sortArray[low];

  while(low

  {

  while(low=key)

  hight--;

  sortArray[low] = sortArray[hight];

  while(low

  low++;

  sortArray[hight] = sortArray[low];

  }

  sortArray[low] = key;

  return low;

  }

  public void sort(int low,int hight)

  {

  if(low

  {

  int result = partition(data,low,hight);

  sort(low,result-1);

  sort(result+1,hight);

  }

  }

  快速排序是对冒泡排序的一种改进。它的基本思想是:通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一不部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。