以下各种排序都是使用数组实现的。
1,冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
package com.test.array;
public class BubbleSortTest {
public static void main(String[] args) {
int[] array = {7,2,9,4,5};
bubbleSort(array);
}
public static void bubbleSort(int[] array){
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length-i-1; j++) {
if(array[j] > array[j+1]){
int tmp = array[j];
array[j] = array[j+1];
array[j+1] = tmp;
}
}
System.out.println("第"+i+1+"趟排序结果");
for (int k = 0; k < array.length; k++) {
System.out.print(array[k]+" ");
}
System.out.println();
}
}
}
最后输出结果为
第01趟排序结果 2 7 4 5 9 第11趟排序结果 2 4 5 7 9 第21趟排序结果 2 4 5 7 9 第31趟排序结果 2 4 5 7 9 第41趟排序结果 2 4 5 7 9
2,二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
package com.test.array;
public class ArraySearchTest {
public static void main(String[] args) {
int[] array = {1,3,6,8,11,18};
int value = 11;
int index = binarySearch(array, value);
System.out.println(index);
}
public static int binarySearch(int[] array, int value) {
int low = 0;
int high = array.length - 1;
int middle;
while (low <= high) {
middle = (low + high) / 2;
if (array[middle] == value) {
return middle;
}
if (value < array[middle]) {
high = middle - 1;
}
if (value > array[middle]) {
low = middle + 1;
}
}
return -1;
}
}
3,生成随机数排序测试:
随机生成50个数字(整数),每个数字的范围是【10,50】,统计每个数字出现的次数以及出现次数最多的数字与它的个数,最后将每个数字及其出现次数打印出来。如果某个出现的次数是0,则不打印它。打印时按照数字的升序排列。
package com.test.array;
import java.util.Random;
public class RandomTest {
public static void main(String[] args) {
Random random = new Random();
int[] count = new int[41]; //【10,50】有41个数字
//生成50个从10到50的随机数
for (int i = 0; i < 50; i++) {
//nextInt返回的是大于等于0,小于界限值的整数值,例如下面的nextInt(41)将返回0到40的整数
int number = random.nextInt(41)+10;
count[number - 10]++; //记录出现的次数
}
int maxTimes = 0;
int maxTimesValue = 0;
//打印结果
for (int i = 0; i < count.length; i++) {
if (count[i] == 0) {
continue;
}
System.out.println((10+i)+"出现次数:"+count[i]);
if(maxTimes < count[i]){
maxTimes = count[i];
maxTimesValue = i +10;
}
}
System.out.println("最大次数是:"+maxTimes+"次,数字是:"+maxTimesValue);
}
}