数组排序与查找
来源:互联网 发布:国外数据新闻案例分析 编辑:程序博客网 时间:2024/05/21 01:29
冒泡排序:
public class Test {public static void main(String[] args) {int[] num = { 23, 71, 49, 52, 81, 40, 11 };int[] num2 = { 99, 88, 77, 66, 55, 44, 33, 22, 11 };/* * for (int i = 0; i < num.length-1; i++) { for (int j = 0; j < * num.length - i-1; j++) { int temp = 0; if (num[j] > num[j + 1]) { * temp = num[j]; num[j] = num[j + 1]; num[j + 1] = temp; } } } */System.out.println("排序前:");Show(num);MaoPao(num);System.out.println("排序后:");Show(num);System.out.println("排序前:");Show(num2);MaoPao(num2);System.out.println("排序后:");Show(num2);}// 遍历数组public static void Show(int[] num) {// 先输出一个左括号System.out.print("[");for (int i = 0; i < num.length; i++) {// 如果是最后一个元素就直接输出if (i == num.length - 1) {System.out.print(num[i]);} else {// 如果不是,输出元素后追加逗号和空格System.out.print(num[i] + ", ");}}// 输出又括号System.out.println("]");}// 冒泡排序 传入的是引用类型,不用设定返回值// 相邻元素两两比较交换,实现排序效果public static void MaoPao(int[] num) {// 元素进行对比的范围,因为是两两比较,需设置界限为长度减一,for (int i = 0; i < num.length - 1; i++) {// 设置单词对比的范围,在第i次比较时范围为长度减一减ifor (int j = 0; j < num.length - i - 1; j++) {int temp = 0;// 如果前一个大于后一个就交换if (num[j] > num[j + 1]) {temp = num[j];num[j] = num[j + 1];num[j + 1] = temp;}}}}}
输出:
排序前:
[23, 71, 49, 52, 81, 40, 11]
排序后:
[11, 23, 40, 49, 52, 71, 81]
排序前:
[99, 88, 77, 66, 55, 44, 33, 22, 11]
排序后:
[11, 22, 33, 44, 55, 66, 77, 88, 99]
选择排序:
public class Test {public static void main(String[] args) {int[] num = { 23, 71, 49, 52, 81, 40, 11 };int[] num2 = { 99, 88, 77, 66, 55, 44, 33, 22, 11 };System.out.println("排序前:");Show(num);XuanZe(num);System.out.println("排序后:");Show(num);System.out.println("排序前:");Show(num2);XuanZe(num2);System.out.println("排序后:");Show(num2);}// 遍历数组public static void Show(int[] num) {// 先输出一个左括号System.out.print("[");for (int i = 0; i < num.length; i++) {// 如果是最后一个元素就直接输出if (i == num.length - 1) {System.out.print(num[i]);} else {// 如果不是,输出元素后追加逗号和空格System.out.print(num[i] + ", ");}}// 输出又括号System.out.println("]");}// 选择排序法public static void XuanZe(int[] num) {// 外循环次数为总数减一,拿出一个元素,待比较的元素数为总数减一for (int i = 0; i < num.length - 1; i++) {// 由于每次排序后最小的值已经在最前,// 所以从已定元素的标号往后开始循环比较// 例如num【0】和之后每个对比如果比后者大就立即交换位置for (int j = i + 1; j < num.length; j++) {int temp = num[0];if (num[i] > num[j]) {temp = num[i];num[i] = num[j];num[j] = temp;}}}}}
输出:
排序前:
[23, 71, 49, 52, 81, 40, 11]
排序后:
[11, 23, 40, 49, 52, 71, 81]
排序前:
[99, 88, 77, 66, 55, 44, 33, 22, 11]
排序后:
[11, 22, 33, 44, 55, 66, 77, 88, 99]
练习:字符串排序
public class Test {public static void main(String[] args) {String s = "asdfghjkl";char[] ch = s.toCharArray();System.out.println("排序前:");System.out.println(s);XuanZe(ch);System.out.println("排序后:");System.out.println(String.valueOf(ch));}// 重载方法接收char【】 参数public static void XuanZe(char[] num) {// 外循环次数为总数减一,拿出一个元素,待比较的元素数为总数减一for (int i = 0; i < num.length - 1; i++) {// 由于每次排序后最小的值已经在最前,// 所以从已定元素的标号往后开始循环比较// 例如num【0】和之后每个对比如果比后者大就立即交换位置for (int j = i + 1; j < num.length; j++) {char temp = num[0];if (num[i] > num[j]) {temp = num[i];num[i] = num[j];num[j] = temp;}}}}}
输出:
排序前:
asdfghjkl
排序后:
adfghjkls
数组查找:
二分查找:
public class Test {public static void main(String[] args) {int[] arr = { 23, 65, 48, 71, 33, 10, 61, 29, 73, 40 };int n = 48;System.out.println("原数组:");Show(arr);MaoPao(arr);System.out.println("排序后的数组:");Show(arr);int m = Search(n, arr);System.out.println("数字" + n + "在数组中出现的位置为:" + m);}// 二分查找// 需先将数组排序,以有小到大排序为例//传入待查值和数组,返回查到的坐标public static int Search(int n, int[] arr) {// 定义一个查找范围的起始坐标int min = 0;// 定义一个查找范围的结束坐标int max = arr.length - 1;// 中间值坐标int mid = (min + max) / 2;// 循环查询while (true) {// 如果待查的值与查询的坐标对应的值相同就返回该坐标if (n == arr[mid]) {return mid;// 如果待查值比查到的数字大,说明对应的坐标靠后} else if (n > arr[mid]) {// 起始坐标变为上一次中间值加一,结束坐标不变// 中间坐标更新min = mid + 1;mid = (min + max) / 2;// 如果待查值比查询的坐标对应的值小,说明对应的坐标靠前} else {// 结尾坐标变为上一次的中间值并减一,起始坐标不变max = mid - 1;// 更新中间坐标mid = (min + max) / 2;}//当起始坐标大于结束坐标时,说明数组中找不到该元素,返回-1if(min>max){return -1;}}}// 冒泡排序 传入的是引用类型,不用设定返回值// 相邻元素两两比较交换,实现排序效果public static void MaoPao(int[] num) {// 元素进行对比的范围,因为是两两比较,需设置界限为长度减一,for (int i = 0; i < num.length - 1; i++) {// 设置单词对比的范围,在第i次比较时范围为长度减一减ifor (int j = 0; j < num.length - i - 1; j++) {int temp = 0;// 如果前一个大于后一个就交换if (num[j] > num[j + 1]) {temp = num[j];num[j] = num[j + 1];num[j + 1] = temp;}}}}// 遍历数组public static void Show(int[] num) {// 先输出一个左括号System.out.print("[");for (int i = 0; i < num.length; i++) {// 如果是最后一个元素就直接输出if (i == num.length - 1) {System.out.print(num[i]);} else {// 如果不是,输出元素后追加逗号和空格System.out.print(num[i] + ", ");}}// 输出又括号System.out.println("]");}}
输出:
原数组:
[23, 65, 48, 71, 33, 10, 61, 29, 73, 40]
排序后的数组:
[10, 23, 29, 33, 40, 48, 61, 65, 71, 73]
数字48在数组中出现的位置为:5
**如果初始数组为无序的,不可用二分查找,因为排序过程数组元素已经发生改变,只能使用基本查找**方法。
Arrays工具类
A:是针对数组进行操作的工具类。包括排序和查找等功能。
B:要掌握的方法(自己补齐方法)
把数组转成字符串:
排序:
二分查找:
//导包import java.util.Arrays;public class Test {public static void main(String[] args) {int[] arr = { 23, 65, 48, 71, 33, 10, 61, 29, 73, 40 };//Arrays.toString(int[] arr),将数组转换成字符串System.out.println("排序前:"+Arrays.toString(arr));//Arrays.sort(int[] arr),数组排序Arrays.sort(arr);System.out.println("排序后:"+Arrays.toString(arr));//二分查找 返回intSystem.out.println(Arrays.binarySearch(arr, 48));}}
输出:
排序前:[23, 65, 48, 71, 33, 10, 61, 29, 73, 40]
排序后:[10, 23, 29, 33, 40, 48, 61, 65, 71, 73]
5
0 0
- 数组排序与查找
- 数组排序与查找
- C#数组查找与排序
- C#数组查找与排序
- C#数组查找与排序
- 数组的排序与查找
- Java基础05-数组排序与查找
- java数组排序,查找与置换
- 数据结构与算法练习-数组查找,排序
- 17、java数组查找与交换排序及快速排序
- 17、java数组查找与交换排序及快速排序
- 旋转排序数组查找
- 数组排序、查找
- 数组排序、查找
- 黑马程序员 java基础 函数 数组 查找与排序总结
- 黑马程序员---数组的学习,定义规范,排序与查找
- C语言 选择排序、折半查找法与二维数组
- 黑马程序员03数组排序与二分法查找
- StringBuffer_StringBuilder
- Android View System概论
- A*算法
- allegro reuse功能
- “娇娇”这把火, 烧得整个机器人圈脸疼
- 数组排序与查找
- JFrame(框架)中添加和设置JPanel(面板
- 2011.6-2012
- 数据类型转换
- 初识A*算法
- PHP:echo中逗号与点号的区别
- NYOJ103A+B Problem II
- 正则表达式及常用类
- DB2数据库切换为oracle数据库经验教训总结