zoukankan      html  css  js  c++  java
  • JAVA学习之数组(排序,折半查找)

    一、数组定义
    同一种类型数据的集合,其实数组就是一个容器
    数组定义格式:
    1.数据类型[] 变量名 = new 数据类型[数组长度]
    int[] arr = new int[5];
    2.数据类型[] 数组名 = new 数据类型[]{元素,元素,.....};
    int[] arr = new int[]{3,5,4,9};
    int[] arr = {3,5,8,9};
    二、数组遍历
    int[] arr = new int[3];
    for(int i=0;i<arr.length;i++)
    {
     System.out.println(arr[i]);
    }
    获取最值(最大值、最小值)
    int[] arr=new int[5];
    		
    int temp=arr[0];
    for(int i=1;i<arr.length;i++)
    {
    	if(temp<arr[i])
    	{
    		temp = arr[i];
    	}
    }
    三、数组排序(Arrays.Sort(arr))
    常见的排序方式:选择排序和冒泡排序
    ①、选择排序
    最值出现在第一位
    代码:
    for(int i=0;i<arr.length-1;i++)
    {
    	for(int j=i+1;j<arr.length;j++)
    	{
    		if(arr[i]>arr[j])
    		{
    			int temp =arr[i];
    			arr[i]=arr[j];
    			arr[j]=temp;
    		}
    	}
    }
     
    ②、冒泡排序
    最值出现在最后位置
     

     代码:

    for(int i=0;i<arr.length-1;i++)
    {
    	for(int j=0;j<arr.length-i-1;j++)
    	{
    		if(arr[j]<arr[j+1])
    		{
    			int temp =arr[j];
    			arr[j]=arr[j+1];
    			arr[j+1]=temp;
    		}
    	}
    }
    

    外循环为行数

    四、数组查找

    折半查找,必须操作有序数组

    	public static int halfSearch(int[] arr,int key)
    	{
    		int min=0;
    		int max=arr.length-1;
    		int mid=(min+max)/2;
    		while(arr[mid]!=key)
    		{
    			if(min>max)
    			{
    				return -1;
    			}
    			if(arr[mid]<key)
    			{
    				min=mid+1;
    			}else if(arr[mid]>key)
    			{
    				max=mid-1;
    			}
    			mid=(min+max)/2;
    		}
    	}
    

    第二种写法

    	public static int halfSearch2(int[] arr,int key)
    	{
    		int min=0;
    		int max=arr.length-1;
    		int mid;
    		while(min<=max)
    		{
    			mid=(min+max)>>1;
    			if(arr[mid]<key)
    			{
    				min=mid+1;
    			}else if(arr[mid]>key)
    			{
    				max=mid-1;
    			}else
    			{
    				return mid;
    			}
    		}
    		return -1;
    	}
    

    折半查找实例:在一个有些数组中插入一个数,并保证数组还是有序数组

     1     public static void main(String[] args)
     2     {
     3         int[] arr=new int[]{2,6,9,10,15,24,29,34,46};
     4         //通过折半查找要插入的元素在数组中的位置
     5         //如果存在这个元素的话就在这个元素所在数组位置插入
     6         //如果不存在这个元素的话就返回最小索引的值
     7         int key =11;
     8         int index=halfSearch(arr,11);
     9         
    10         int[] arrTemp=new int[arr.length + 1];
    11         for(int i=0;i<arr.length-1;i++)
    12         {
    13                 arrTemp[i]=arr[i];
    14         }
    15         for(int i=arrTemp.length-1;i>=index;i--)
    16         {
    17             if(index==i)
    18                 arrTemp[i]=key;
    19             else
    20                 arrTemp[i]=arrTemp[i-1];
    21         }
    22         for(int i=0;i<arrTemp.length-1;i++)
    23         {
    24             System.out.println(arrTemp[i]);
    25         }
    26         
    27     }
    28     public static int halfSearch(int[] arr,int key)
    29     {
    30         int min=0;
    31         int max=arr.length-1;
    32         int mid;
    33         while(min<=max)
    34         {
    35             mid=(min+max)>>1;
    36             if(arr[mid]<key)
    37             {
    38                 min=mid+1;
    39             }else if(arr[mid]>key)
    40             {
    41                 max=mid-1;
    42             }else
    43             {
    44                 return mid;
    45             }
    46         }
    47         return min;
    48     }
    View Code
  • 相关阅读:
    [o] SQLite数据库报错: Invalid column C
    startActivityForResult和setResult详解
    [o] duplicate column name: _id 问题解决
    [O] SQLite数据库报错:no such column
    [原创] SQLite数据库使用清单(下)
    [原创] SQLite数据库使用清单(上)
    iOS CocoaPods详解之 Analyzing dependencies
    iOS UILabe的详细使用及特殊效果
    一个简单的socket通信小demo
    iOS Lable给文字添加中划线和下划线
  • 原文地址:https://www.cnblogs.com/WarBlog/p/12030230.html
Copyright © 2011-2022 走看看