简述java实现冒泡排序和顺序查找
一、冒泡排序(Bubble Sort)
也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。
我们假设一个数组是:{18, 20,16,99,15};
程序思路:
化繁为简:
我们先把99作为数组中最大的元素放在最后一个的程序写出来:
for(int j = 0; j < 4;j++){//5个元素,循环4次 if(arr[j] > arr[j+1]){ max = arr[j+1]; arr[j+1] = arr[j]; arr[j] = max; }
最后输出第一次,第二次也是一样,不过是 j < 3 ,二次排序后的结果:
先死后活:
我们把第几次循环看成外出循环,每次剩余数排序看成内循环,这样一个双重循环便实现了冒泡排序。
//import java.util.Scanner;//引入包,用户才能使用输出功能 public class Day04{ public static void main (String[] args){ //冒泡排序法 //化繁为简 先死后活 int arr[] = {79,81,100,99,64}; int max = arr[0];//引入中间变量便于交换 for(int i=arr.length -1; i >0; i--){//外层循环表示循环轮数 for(int j = 0; j < i;j++){ if(arr[j] > arr[j+1]){ max = arr[j+1]; arr[j+1] = arr[j]; arr[j] = max; } } }//第轮比较 System.out.println("冒泡排序后效果:"); for(int i = 0;i<arr.length;i++){ System.out.print(arr[i]+" "); } } }
代码效果:
我们换个数组,便于验证程序的正确性。
二、顺序查找
顺序查找是按照序列原有顺序对数组进行遍历比较查询的基本查找算法。
定义一个字符串数组: String names[] = {"钢铁侠","蜘蛛侠","蝙蝠侠","猪猪侠","美国队长"}; 我们用户输入一个名字,判断是否存在,并给出回馈,如果存在输出下标,如果不存在,输出不存在该名字。
程序分析:
我们使用 index 作为一个引用,如果存在该名字,对index重新赋值,我们对index的值进行判断,index的值不变,我们可以使用条件判断语句输出该名字不存在,使用do--while循环,使用户可以一直查找下去。
注意:比较字符串是否相等,我们应该使用equals语句。if(findName.equals(names[i]))
代码实现:
import java.util.Scanner;//引入包,用户才能使用输出功能 public class SeqSearch{//sequential search 顺序查找 //顺序查找是按照序列原有顺序对数组进行遍历比较查询的基本查找算法。 public static void main (String[] args){ int index = -1;//便于后面没有找到退出程序 String names[] = {"钢铁侠","蜘蛛侠","蝙蝠侠","猪猪侠","美国队长"}; Scanner myScanner = new Scanner(System.in); //遍历数组,逐一比较,如果有则提示信息后退出循环,没有也提示相应的信息 do{ System.out.println("请输入名字:"); String findName = myScanner.next(); for(int i = 0 ; i < names.length;i++){ if(findName.equals(names[i])){ System.out.println("恭喜你找到了"); System.out.println("其下标=" + i); index = i; break; } } if(index==-1){ System.out.println("你要查找的名字不存在"); } }while(index==-1); } }
代码效果:
我们看一下钢铁侠对应的下标,发现我们是正确的。