根据排序算法,可以解决一些小案例。举例如下:
/* * 把字符串中的字符进行排序。 * 举例:"dacgebf" * 结果:"abcdefg" * * 分析: * A:定义一个字符串 * B:把字符串转换为字符数组 * C:把字符数组进行排序 * D:把排序后的字符数组转成字符串 * E:输出最后的字符串 */ public class ArrayTest { public static void main(String[] args) { // 定义一个字符串 String s = "dacgebf"; // 把字符串转换为字符数组 char[] chs = s.toCharArray();// 将此字符串转换为一个新的字符数组。String类的方法public char[] toCharArray() // 把字符数组进行排序 bubbleSort(chs);//自定义排序方法。这里定义为冒泡算法 // 把排序后的字符数组转成字符串,valueOf()把任意类型转换为字符串。 String result = String.valueOf(chs);// String类的方法:public static String valueOf(char[] data)返回:一个新分配的字符串 // 输出最后的字符串 System.out.println("result:" + result); } // 冒泡排序 public static void bubbleSort(char[] chs) {// 冒泡方法,最大索引的值不用再去比较了 for (int x = 0; x < chs.length - 1; x++) { for (int y = 0; y < chs.length - 1 - x; y++) { if (chs[y] > chs[y + 1]) {// 前面的大于后面的,交换,始终使后面的大于前面。 char temp = chs[y];// 交换 chs[y] = chs[y + 1]; chs[y + 1] = temp; } } } } }
二分查找存在一的一个注意事项。
二分查找仅仅在有序的数组中进行查找。如果给定的是无序的,不可以使用二分查找。下面就举例说明,问题出在哪里。
public class ArrayDemo2 { public static void main(String[] args) { // 定义数组 int[] arr = { 24, 69, 80, 57, 13 }; // 先排序 bubbleSort(arr); // 后查找 int index = getIndex(arr, 80); System.out.println("index:" + index); } // 冒泡排序代码 public static void bubbleSort(int[] arr) { for (int x = 0; x < arr.length - 1; x++) {// 次数,几轮 for (int y = 0; y < arr.length - 1 - x; y++) {// if (arr[y] > arr[y + 1]) {// 两两比较,把小的数放到前面去,把大的最终放在最后 int temp = arr[y]; arr[y] = arr[y + 1]; arr[y + 1] = temp; } } } } // 二分查找 public static int getIndex(int[] arr, int value) { // 定义最大索引,最小索引 int max = arr.length - 1; int min = 0; // 计算出中间索引 int mid = (max + min) / 2; // 拿中间索引的值和要查找的值进行比较 while (arr[mid] != value) { if (arr[mid] > value) {// 大了 max = mid - 1;// 向左边查找 } else if (arr[mid] < value) {// 小了 min = mid + 1;// 向右边去找查找 } // 加入判断 if (min > max) { return -1; } mid = (max + min) / 2; } return mid; } }
输出打印索引index=4
80在数组中的索引明明是80,而这里却是4..显然这是有问题的.。问题就出在排序后改变了数组的索引位置。那如何解决呢?
使用基本查找方法:
下面只给出基本查找的方法:
public static int getIndex(int[] arr,int value) { int index = -1; for(int x=0; x<arr.length; x++) {//遍历数组,逐一比较 if(arr[x] == value) { index = x; break; } } return index; }
这样,这个问题就解决了。
看标题是Arrays类的前传。那下一篇,就正式进入Arrays类,查找以及排序等等问题将会变的非常非常简单。
到目前为止,个人博客文章正式达到100篇整。心里很高兴,希望自己的文章,在能提高自己的同时,也能够帮助到更多人。目前java第一季大约四分之一了,第二季的时候会以专题的形式,对每个重点以及一些源码分析做叙述。希望看到的同行互加关注,留下脚印,一起讨论!