Java【查找和排序算法】

/*
 *线性查找,指定的数
 *
 */



int array[] = {10,23,88,1,45,99,13};
Scanner input = new Scanner(System.in);
int number = input.nextInt();
int index = -1;    //保存找到数的下标
for(int i = 0; i <array.length ; i++){
    if(array[i] == number){
        index = i+1 ;
        break;
    }
    if(index = -1){
        System.out.print("你要查找的数不存在")
    }else{
          System.out.print("找到,你要找的数在数组中第" + index +"数")
    }
}





/* 
 *线性查找,求数组最大、最小值
 */

int array[] = {10,23,88,1,45,99,13};

int max =array[0];    //最大值
int min  =array[0];    //最小值
for(int i = 0; i <array.length ; i++){
    if(array[i] >max){
        max = array[i];
    }
    if((array[i] <min){
        min = array[i]
    }
    System.out.print("最大值:" + max);
    System.out.print("最小值:" + mix);
}






/*
*二分查找(针对有序的数组)
*
*/


int array[] = {10,23,88,99,131};
Scanner input = new Scanner(System.in);
int number = input.nextInt();
int index = -1;    //保存找到数的所在数组位置的下标,未找到等于-1;
int start = 0;    //起始下标
int end = array.length-1;    //最末下标
int middle;    
while(){
    //找到中间位置对应的元素值
    middle =(start + end)/2;
    if(number == array[midddle]){
        index = middle +1;
        break;
    }

    //假如大于中间的数
    if(number > array[midddle]){
        start = middle+1;
    }

    //假如小于中间的数
    if(number < array[midddle]){
        end = middle-1;
    }
    if(index == -1){
        System.out.print("未找到你要找的数!!");
    }else{
         System.out.print("找到,你要找的数在数组中第" + index +"数");
    }
}





/*
*排序,冒泡排序
*/

int array[] = {10,23,88,1,45,99,13};
//N个数比较的轮数为N-1次
for(int i = 0; i <array.length ; i++){
    //每一轮比较的次数为N-1-i次
    for(int j = 0; j <array.length-1-i ; j++){
         //比较相邻两个数,小靠前;
         if(array[j] >array [j+1]){
            int temp = array[j];
                array[j] = array[j+1];    
                array[j+1] = temp;
         }
    }
}

//把排好序的数组输出
for(int i = 0; i <array.length ; i++){
     System.out.print(array[i] + " ");
}





/*
*排序,选择排序
*/


int array[] = {10,23,88,1,45,99,13};
int min=0;    //保存最小元素值的下标
//N个数比较的轮数为N-1次
for(int i = 0; i <array.length ; i++){
    //每一轮比较的次数为N-1-i次
    min = i;
    //查找最小数在数组中的下标
    for(int j = i+1; j<array.length ;j++){
        if(array[min] > array[j]){
            min = j;
        }
        
        //如果第i个最小数位置不在i上,则进行交换
        if(i != min){
            int temp = array[i];
            array[i] = array[min];
            array[min] = temp;
        }
    }

}

//把排好序的数组输出
for(int i = 0; i <array.length ; i++){
     System.out.print(array[i] + " ");
}



/*
*排序,插入排序
*/

int array[] = {10,23,88,1,45,99,13};
for(int i = 0; i <array.length ; i++){
      int temp = array[i];
    //把下标保存下来
      int j=i;
      while(j>0 &&temp <array[j-1]){
        array[j] = array[j-1];
        j--;
      }
      array[j] = temp ;
}

//把排好序的数组输出
for(int i = 0; i <array.length ; i++){
     System.out.print(array[i] + " ");
}












猜你喜欢

转载自blog.csdn.net/qq_40788793/article/details/84572044