/*
* 冒泡排序:
* 将两个相邻的数字进行比较,如果第一个数比第二个数大,就交换,一直比较到最后,将把最大值移动到数组的末尾;
* 将上述的程序再次执行,将把数组中第二大的数字移到数组的后边,依次类推,反复比较。
*/
public class Demo {
public static void main(String[] args) {
int[] array = {1432,432,6543,523,43,867};
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;
}
}
}
//遍历数据,查看效果
for(int i = 0;i < array.length ; i++){
System.out.println(array[i]);
}
}
}
/*
* 选择排序:
*
* 1.是将每个数,与它后边的每个数依次进行比较
*/
public class Demo {
public static void main(String[] args) {
int[] array = {21,43,24,4365,42,42,554,76,57,3,66,96};
for(int i = 0;i < array.length - 1 ; i++){
for(int j = i + 1 ; j < array.length ; j++){
if(array[i] > array[j]){
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
//遍历检查结果
for(int i = 0;i < array.length ; i++){
System.out.println(array[i]);
}
}
}
//二分查找。前提:数组必须是有序的。
/*
思路:
1,通过角标先获取中间角标上元素。
2,让该元素和要找的数据比较。
3,如果要找的数大了,缩小范围,要找的范围应该是 中间的角标+1---尾角标。
如果要找的数小了,要找的范围 头角标---中间角标-1;
4,不断如此重复,就可以找到元素对应的角标。
*/
public class Demo {
public static void main(String[] args) {
int[] array = {10,20,30,40,50};
int start = 0;
int end = array.length - 1;
int mid = (start + end) / 2; //第一次找的索引
int num = 50; //要找的数
boolean flag = false;
while(start <= end){
if ( num < array [ mid ] ){//往左走
end = mid - 1;
}else if( num > array[ mid ] ){ // 往右走
start = mid + 1;
}else {
// System.out.println("找到数字,索引:" + mid);
flag = true;
break;
}
mid = (start + end) / 2;
}
/*if(start > end){
System.out.println("数字没找到!");
}*/
if(flag){
System.out.println("找到数字:索引为:" + mid);
}else{
System.out.println("数字没找到 !");
}
}
}
|
|