看到网上的一段关于对数组操作的代码,觉得有用,在此备用。
importjava.util.Arrays;
importjava.util.List;
importjava.util.Map;
importjava.util.Random;
importjava.util.TreeMap;
/**
*@desc数组操作工具
*@authorOuyangPeng
*@datatime2013-5-1110:31:02
*
*/
publicclassMyArrayUtils{
/**
*排序算法的分类如下:1.插入排序(直接插入排序、折半插入排序、希尔排序);2.交换排序(冒泡泡排序、快速排序);
*3.选择排序(直接选择排序、堆排序);4.归并排序;5.基数排序。
*
*关于排序方法的选择:(1)若n较小(如n≤50),可采用直接插入或直接选择排序。
*(2)若文件初始状态基本有序(指正序),则应选用直接插人、冒泡或随机的快速排序为宜;
*(3)若n较大,则应采用时间复杂度为O(nlgn)的排序方法:快速排序、堆排序或归并排序。
*
*/
/**
*交换数组中两元素
*
*@since1.1
*@paramints
*需要进行交换操作的数组
*@paramx
*数组中的位置1
*@paramy
*数组中的位置2
*@return交换后的数组
*/
publicstaticint[]swap(int[]ints,intx,inty){
inttemp=ints[x];
ints[x]=ints[y];
ints[y]=temp;
returnints;
}
/**
*冒泡排序方法:相邻两元素进行比较性能:比较次数O(n^2),n^2/2;交换次数O(n^2),n^2/4
*冒泡排序(BubbleSort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,
*如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,
*也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
冒泡排序算法的运作如下:
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
*@since1.1
*@paramsource
*需要进行排序操作的数组
*@return排序后的数组
*/
publicstaticint[]bubbleSort(int[]source){
/*for(inti=0;isource[j+1]){//把大的值交换到后面
swap(source,j,j+1);
}
}
}*/
for(inti=source.length-1;i>0;i--){
for(intj=0;jsource[j+1]){
swap(source,j,j+1);
}
}
}
returnsource;
}
/**
*选择排序法方法:选择排序(Selectionsort)是一种简单直观的排序算法,其平均时间复杂度为O(n2)。
*它的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,
*再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此类推,直到所有元素均排序完毕。
*性能:选择排序的交换操作介于0和(n-1)次之间,选择排序的比较操作为n(n-1)/2次之间,
*选择排序的赋值操作介于0和3(n-1)次之间,其平均时间复杂度为O(n2)
*交换次数比冒泡排序少多了,由于交换所需CPU时间比比较所需的CUP时间多,所以选择排序比冒泡排序快。
*但是N比较大时,比较所需的CPU时间占主要地位,所以这时的性能和冒泡排序差不太多,但毫无疑问肯定要快些。
*
*@since1.1
*@paramsource
*需要进行排序操作的数组
*@return排序后的数组
*/
publicstaticint[]selectSort(int[]source){
for(inti=0;isource[j]){
swap(source,i,j);
}
}
}
returnsource;
}
/**
*插入排序方法:将一个记录插入到已排好序的有序表(有可能是空表)中,从而得到一个新的记录数增1的有序表。性能:比较次数O(n^2),n^2/4
*复制次数O(n),n^2/4比较次数是前两者的一般,而复制所需的CPU时间较交换少,所以性能上比冒泡排序提高一倍多,而比选择排序也要快。
*
*@since1.1
*@paramsource
*需要进行排序操作的数组
*@return排序后的数组
*/
publicstaticint[]insertSort(int[]source){
for(inti=1;i0)&&(source[j]