数组冒泡排序法
当数组有n个元素时,进行n-1轮排序,从第一位元素开始,与其后一位元素相比较,若小于(大于)等于后者则不动,若大于(小于)后者则二者交换位置,然后第二位第三位依次比较直至最后一位,这样交换一轮过后,数组的最后一位应该是最大(小)的那个。第二轮得到的最后两位的正确位置,进行n-1轮后,可以得到后n-1位的正确位置,那只剩下的第一位肯定也是正确的。是比较稳定的排序方法。
以极端情况为例,数组{6,5,4,3,2,1}(从小到大排序):
第一轮比较结束:5,4,3,2,1,6;
第二轮比较结束:4,3,2,1,5,6;
第三轮比较结束:3,2,1,4,5,6;
第三轮比较结束:2,1,3,4,5,6;
第三轮比较结束:1,2,3,4,5,6;
int[] num = {6,5,4,3,2,1};
int len = mun.length;
for(int i = 0;i < len-1;i++)//i控制循环次(轮)数
{
for(int j = 0;j < len - 1 - i;j++)//j控制每轮比较次数
{//后几位排好后就不需要在排序了,所以为了减少循环次数每排少比较i次
if(mun[j] > mun[j+1])
{
mun[j] = mun[j] + mun[j+1];
mun[j+1] = mun[j] - mun[j+1];
mun[j] = mun[j] - mun[j+1];
}
}
}
选择排序法
每一轮从待排序的数据中选出最小的(最大)的元素,放在已排好顺序的元素的最后,直到全部排完。选择排序是不稳定的排序方法。
int[] num = {6,5,4,3,2,1};
int len = mun.length,flag;
for(int i = 0;i < len;i++)
{//排到了第几位
flag = 99999;//flag标记当前最小元素,以一个大数初始化避免初始化的数排进数组中
for(int j = i;j < len;j++)
{//选第i位
if(flag >mun[j])
{
flag = mun[i];
}
}
mun[i] = flag;
}
二分查找法
在意排好序的数组中,通过将待查找的元素与中间索引值对应的元素进行比较,若大于则去右边继续以此法方查找,否则去左边,直到找到为止,若未找到则返回一个负数。
例如:在int[] nums = {1,3,5,8,9,16,18,19,35,48,59}中间查找48.
共11个元素,于是先找nums[5],16<48,所以到右边找;
(6+10)/2 = 8,于是查看nums[8],35<48,继续找右边;
(9+10)/2 = 9,于是查看nums[9],48=48,找到,返回下标9.
Arrays工具类
用来操作数组的类,包含了各种方法。
常用法方:
二分查找法:
Arrays.binarySearch(int[] arrays,int value);
//arrays:要查找的数组,value:要查找的值;
数组排序:
Arrays.sort(int[] arrays);
将数组内容转变为字符串输出:
Arrays.toString(int[] arrays);
复制指定数组:
Arrays.copyOf(int[] arrays ,int length);
//从arrays的第一位开始复制长度为length的数据
Arrays.copyOf(int[] arrays ,int from ,int to);
//从arrays中复制第from到to位的数据
判断两个数组是否相等:
Arrays.equels(int[] arrays1 ,int[] arrays2);
使用指定元素填充数组:
Arrays.fill(int[] arrays ,int val);
Arrays.fill(int[] arrays ,int formIndex ,int toIndes ,int val);