冒泡排序
核心思想:相邻两个数比较大小,然后换位
public static void main(String[] args) {
int[] name = new int[] {12,51,34,29,54,64,23};
// Arrays.sort(name);//系统的排序
// System.out.println(Arrays.toString(name));
//升序排列
//for (int j= 1; j < name.length; j++)
//{
// for (int i = 1; i <= name.length-j; i++)
//{
// if (name[i]<name[i-1])
// {
// int temp = name[i-1];
// name[i-1] = name[i];
// name[i] = temp;
// }
//}
//}
int[] array = new int[] {3,2,5,1};
//外层循环控制比较的趟数,内存循环控制
for (int i = 0; i < array.length-1; i++)
{
//内循环次数-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;
}
}
}
//System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(sort(name)));
}
//封装一个函数进行排序
//这里传入的数组,是将原数组的地址传入,是地址的传递,根据地址来修改原来数组里面的元素的位置
//这时sort函数中就是对原数组进行了操作
public static int[] sort(int[] array)
{
for (int i = 0; i < array.length-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;
}
}
}
return array;
}
选择排序:
* 选择排序的核心:选择一个数与下一个数进行比较,用这个数和数组中的每一个数都进行一次比较,
* 一般就选第0个数,然后交换位置
public static void main(String[] args)
{
int[] array = new int[] {6,5,4,3,2,1};
//外循环-1,是因为最后一个数不需要比较,所以循环的次数要-1
for (int i = 0; i < array.length-1; i++) {
//内循环,j的初始值要从1开始,
//j =1+i是因为每次重新开始比较的时候,都会少比较一次
for (int j = 1+i; j < array.length; j++)
{
//
if (array[i]>array[j])
{
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
System.out.println(Arrays.toString(array));
}
折半查找
* 前提:需要一个有序的数组(通过最大小标和最小下标的移动来比较大小)
public static void main(String[] args) {
int[] array = new int[] {3,6,8,11,13,19,25};
int a = 25;
int first = 0;
int last = array.length-1;
int num = (last+first)/2;
while(a != array[num])//如果中间角标带入数组与要找的值相等,在循环结束
{
if (a<array[num])
{
last = num - 1;
}else if (a>array[num])
{
first = num + 1;
}
//重复折半的操作
num = (last + first)/2;
//判断如果数组中没有这个数,会造成死循环
if (first > last) //这里说明没有找到这个数,需要停止循环
{
num = -1;
break;
}
}
System.out.println("数的下标是" + num);
}