1. 程式人生 > >Java習題(選擇,冒泡排序,折半查找)

Java習題(選擇,冒泡排序,折半查找)

args arr i+1 數字 選擇排序 技術分享 單選 custom pan

解決問題如下:

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.實際上就是比較一次能排除一半的元素,再在另一半的元素裏查找,直到找到或者失敗.

簡單選擇排序是最簡單直觀的一種算法,基本思想為每一趟從待排序的數據元素中選擇最小(或最大)的一個元素作為首元素,直到所有元素排完為止,簡單選擇排序是不穩定排序。

冒泡排序算法的運作如下:(從後往前)
    1. 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
    2. 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
    3. 針對所有的元素重復以上的步驟,除了最後一個。
    4. 持續每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較。

介紹完主要的思想後接下來是代碼,因為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+"時該順序數組中無其數");
			 }
	 }
}

  執行結果如下:

技術分享圖片

Java習題(選擇,冒泡排序,折半查找)