一维数组的排序及查找

冒泡排序

	int[] arr={3,3,6,7,2,5,8};
		//找到当前最大的数,挪位置
		//有几个数来几次
       for (int i = 0; i < arr.length; i++) {
				for (int j = 0; j < arr.length-1; j++) {
					if (arr[j]>arr[j+1]) {
						int c=0;
						c=arr[j];
						arr[j]=arr[j+1];
						arr[j+1]=c;
					}
				}
			}for (int i:arr) {
    //遍历,加强for(类型变量名,需要遍历的目标)变量用来代表每次遍历的值
	//特点:没有了下标
				System.out.print(i+" ");
			} 

优化

//冒泡排序
		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 c=0;
						c=arr[j];
						arr[j]=arr[j+1];
						arr[j+1]=c;
					}
				}
			}for (int i:arr) {
				System.out.print(i+" ");
			}

再次优化

package com.neuedu.three;

public class Test6 {
  public static void main(String[] args) {
    int[]arr = {9,2,3,4,5,6,7,8};
    int count = 0;    
    //找到当前最大的数,挪位置
    //有几个数来几次
    boolean flag ;
    for (int j = 0; j < arr.length-1-j; j++) {
      flag = true;
      for (int i = 0,x = arr.length-1-j; i < arr.length-1&&x>0; i++,x--) {
        count++;
        int temp1 = 0;
        if(arr[i]>arr[i+1]) {
          flag = false;
          temp1 = arr[i+1];
          arr[i+1] = arr[i];
          arr[i] = temp1;
        }
        int temp2 = 0;
        if(arr[x]<arr[x-1]) {
          flag = false;
          temp2 = arr[x-1];
          arr[x-1] = arr[x];
          arr[x] = temp2;
        }
      }            
      if(flag) {
        break;
      }
    }
    
    System.out.println(count);
    for (int i : arr) {
      System.out.print(i+",");
    }
    
  }
}

选择排序

 int[]arr = {5,7,3,1,8,3};//数组初始化
    int maxIndex;//记录当前最大元素的下标
    for (int j = 0; j < arr.length-1; j++) {//排序趟数
      maxIndex = 0;//置零保证每次从第一个元素开始比较
      for (int i = 1; i < arr.length-j; i++) {//i=1是因为默认maxIndex为0,默认每趟比较次数
        if(arr[maxIndex]<arr[i]) {//判断大小,如果下标为i的元素大于下标为maxIndex的元素
          maxIndex = i;//更新最大元素的下标
        }
      }
        //将大的元素换到后边,第j次换到倒数第j个元素位置
      int temp = arr[arr.length-1-j] ;//中间变量存储一个值
      arr[arr.length-1-j] = arr[maxIndex];
      arr[maxIndex] = temp;          
    }
    for (int i : arr) {
      System.out.print(i+" ");
    }

性能最优的排序 桶排序         

int count=0;
			int[] arr={3,5,6,7,12,4,7};
			int[] brr=new int [13];
			for (int i = 0; i < arr.length; i++) {
				brr[arr[i]]++;
			}
			for (int i = 0; i < brr.length; i++) {
				while (brr[i]-->0) {
					System.out.print(i+" ");
					//arr[count++]=i;
				}
			}System.out.println();
			
			//for(int i:arr){//加强for循环遍历数组
			//	System.out.print(i+" ");
			//}

二分查找(前提是已经升序排序)

int []arr={1,2,3,4,5,6,7,8,9};
			int max=arr.length-1,min=0,local=-1;
			//值为6的元素的下标
			int key=6;
			int mid;
			while(max>=min){
				mid=(max+min)/2;
				if (arr[mid]==key) {
					local=mid;
					System.out.println(local);
					break;
				}else if (arr[mid]>key) {
					max=mid-1;
				}else {
					min=mid+1;
				}
			}
			if (local==-1) {
				System.out.println("数组中不存在元素" + key);
			}

 


版权声明:本文为yyy1350956533原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。