Java习题(选择,冒泡排序,折半查找)
解决问题如下:
1.求1+2!+3!+...+20!的和。
2.获取数组中的最大和最小值。
3.对数组进行选择排序、冒泡排序。
4.在数组中查找某个数的位置(折半查找)。
折半查找: 适合顺序表的查找,数组中存的是按顺序排列的元素,方法如下:
定义变量low,mid,high分别指向数组中的最低位,中间和最高位的元素;比较要查找的元素和mid指向的元素,如果比mid大,则在mid和high之间继续查找,low=mid+1;
否则在low和mid之间继续查找,high=mid-1.直到low大于high停止,
找到要找的元素则返回标号,未找到则返回null.实际上就是比较一次能排除一半的元素,再在另一半的元素里查找,直到找到或者失败.
简单选择排序是最简单直观的一种算法,基本思想为每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素,直到所有元素排完为止,简单选择排序是不稳定排序。
冒泡排序算法的运作如下:(从后往前)
-
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
-
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
-
针对所有的元素重复以上的步骤,除了最后一个。
-
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
介绍完主要的思想后接下来是代码,因为JAVA还在初步学习中,希望大家多多指教!!!
class home { public static void main(String[] args) { System.out.println("你好!这是 1+2!+3!+...+20!求和结果"); JC(20); System.out.println(); System.out.println(); System.out.println("你好!这是获取数组中的最大和最小值的结果"); int[] arr={2,1,3,5,9,2,7}; int[] arr1={3,2,5,8,4,15,14,1,25,6,3}; maxMin(arr); System.out.println(); System.out.println(); System.out.println("你好!这是选择排序的结果"); xzPX(arr); System.out.println(); System.out.println(); System.out.println("你好!这是冒泡排序的结果"); mpPX(arr1); System.out.println(); System.out.println(); System.out.println("你好!这是折中选择1的结果"); zzPX(arr,30); System.out.println(); System.out.println(); System.out.println("你好!这是折中选择2的结果"); zzPX(arr1,14); } public static void JC(int num) { int sum=0; for (int i=1;i<=num ;i++ ) { int n=1; for(int j=1;j<=i;j++) { n=n*j; } sum=sum+n; } System.out.println("当n个阶乘之和的n为"+num+"时"+"其和为"+sum); } public static void maxMin(int[] arr) { int max=arr[0]; int min=arr[0]; for (int i=0;i<arr.length ;i++ ) { if(max<arr[i]){ max=arr[i]; } if(min>arr[i]){ min=arr[i]; } } System.out.print("当数组为"); for(int j=0;j<arr.length;j++){ System.out.print(arr[j]+","); } System.out.println("其最大值为"+max+"最小值为"+min); } public static void sz(int[] arr) { for(int j=0;j<arr.length;j++){ System.out.print(arr[j]+","); } } public static void xzPX(int[] arr) { System.out.print("未改变之前数组为"); sz(arr); for (int i=0;i<arr.length ;i++ ) { for (int j=i+1;j<arr.length ;j++ ) { if(arr[i]>arr[j]){ int a=arr[j]; arr[j]=arr[i]; arr[i]=a; } } } System.out.print("改变之后数组为"); sz(arr); } public static void mpPX(int[] arr) { sz(arr); for (int i=0;i<arr.length ;i++ ) { //int b=i; for (int j=1;j<arr.length-i ;j++) { if(arr[j-1]>arr[j]){ int a=arr[j-1]; arr[j-1]=arr[j]; arr[j]=a; } //b=b+1; } } System.out.print("改变之后数组为"); sz(arr); } public static void zzPX(int[] arr,int n) { System.out.print("顺序数组为"); sz(arr); System.out.print("数组长度为"+arr.length); int min=0; int max=arr.length-1; int mid=(min+max)/2; boolean a=false; while (min<max) { if (n>arr[mid]) { min=mid+1; mid=(min+max)/2; } else if(n<arr[mid]) { max=mid-1; mid=(min+max)/2; } else if(n==arr[mid]) { System.out.println("当n等于"+n+"时其索引号为 "+mid); a=true; break; } } if(a==false) { System.out.println("当n等于"+n+"时该顺序数组中无其数"); } } }
执行结果如下: