白天上课写的代码,java基础所要学习的内容基本都在这里了包括,选择排序,冒泡排序,和一个有关排序效率的问题(当要处理的数据量比较大的时候)
以及判断一个数是否在数组当中,如果不在,假设要插入的话应该在哪个位置,获取该位置的角标
import java.util.*;
class SortDemo
{
public static void main(String[] args)
{
int[] arr = {31,4,34,12,23,99,12,42,25,33,6,55,78,21};
printArray(arr);
//bubbleSort_2(arr);
//selectSort(arr);
selectSort_2(arr);
//Arrays.sort(arr);
printArray(arr);
//selectSort(arr);
//printArray(arr);
//System.out.println("请输入要查找的数...");
//Scanner sc = new Scanner(System.in);
//int x = sc.nextInt();
int index = insertValue(arr,43);
System.out.println(index);
int index1 = Arrays.binarySearch(arr,43);//若存在返回角标位置,不存在返回-插入点-1
System.out.println(index1);
}
public static void swap(int[] arr,int a,int b)
{
arr[a] = arr[a] ^ arr[b];
arr[b] = arr[a] ^ arr[b];
arr[a] = arr[a] ^ arr[b];
//int temp = arr[a];
//arr[a] = arr[b];
//arr[b] = temp;
}
public static void printArray(int[] arr){
System.out.print("[");
for (int x=0; x<arr.length; x++)
{
if(x!=arr.length-1)
System.out.print(arr[x]+", ");
else
System.out.println(arr[x]+"]");
}
System.out.println();
}
public static void selectSort(int[] arr)
{
for(int x=0; x<arr.length-1; x++)
{
for(int y=x+1; y<arr.length; y++)
{
if(arr[x]>arr[y])
{
//int temp = arr[x];
//arr[x] = arr[y];
//arr[y] = temp;
swap(arr,x,y);
}
}
}
}
//更加高效,先比较,直到找出最小值时再进行换位
public static void selectSort_2(int[] arr)
{
for(int x=0; x<arr.length-1; x++)
{
int value = arr[x];
int index = x;
for(int y=x+1; y<arr.length; y++)
{
if(value>arr[y])
{
value = arr[y];
index = y;
//int temp = arr[x];
//arr[x] = arr[y];
//arr[y] = temp;
//swap(arr,x,y);
}
}
if(index != x)
swap(arr,index,x);
}
}
public static void bubbleSort_1(int[] arr)
{
for(int x=0; x<arr.length-1; x++)
{
for (int y=0; y<arr.length-x-1; y++)
{
if(arr[y]>arr[y+1])
{
swap(arr,y,y+1);
}
}
}
}
public static void bubbleSort_2(int[] arr)
{
for(int x=arr.length-1; x>0; x--)
{
for (int y=0; y<x; y++)
{
if(arr[y]>arr[y+1])
{
swap(arr,y,y+1);
}
}
}
}
public static int getIndex(int[] arr,int key)
{
for (int x=0; x<arr.length; x++)
{
if(arr[x]==key)
return x;
}
return -1;
}
public static int halfSearch(int[] arr,int key)
{
int max = arr.length-1;
int min = 0;
int mid = (max + min)/2;
while(arr[mid] != key)
{
if(key>arr[mid])
{
min = mid + 1;
}
else
{
max = mid - 1;
}
if(max<min)
{
return -1;
}
mid = (min + max)/2;
}
return mid;
}
public static int halfSearch_2(int[] arr,int key)
{
int max = arr.length-1;
int min = 0;
int mid;
while(min<=max)
{
mid = (max + min)>>1;
if(key>arr[mid])
{
min = mid + 1;
}
else if(key<arr[mid])
{
max = mid - 1;
}
else
{
return mid;
}
//mid = (max + min)>>1;
}
return -1;
}
/*如果要插入一个数,求应该放入的位置*/
public static int insertValue(int[] arr,int key)
{
int max = arr.length-1;
int min = 0;
int mid;
while(min<=max)
{
mid = (max + min)>>1;
if(key>arr[mid])
{
min = mid + 1;
}
else if(key<arr[mid])
{
max = mid - 1;
}
else
{
return mid;
}
//mid = (max + min)>>1;
}
return min;
}
}
|
|