冒泡排序算法、选择排序算法、插入排序算法、二分查找算法、最大最小值算法

算法

冒泡排序算法

比较相邻的元素。如果第一个比第二个大,就交换他们两个。

相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。

1、比较的轮数等于数列的长度减一

2、比较的次数等于数列的长度减一减i

public class Suanfa {
    public static void  main(String[] arge){
        int[] sums = {25,45,2,68,36,78};
        for (int i=0 ; i<sums.length-1;i++){
            for (int j=0;j<sums.length-1-i;j++){
                if(sums[j]>sums[j+1]){
                    sums[j]=sums[j]+sums[j+1];
                    sums[j+1]=sums[j]-sums[j+1];
                    sums[j]=sums[j]-sums[j+1];
                }
            }
            }
            for (int n :sums ) {
                System.out.println(" "+n);
        }

}

}

选择排序算法

每一躺从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已经安排好的数列的最后,直到全部待排序的数据元素排完。

int[] sums = {25,45,2,68,36,78};
 int min;//用于记录每次比较的最小值下标
 for (int i=0 ;i<sums.length-1 ;i++){
     min =i; //每轮假设一个最小值小标
     for (int j=i+1;j<sums.length;j++){
     if (sums[min] > sums[j]) {
         min = j;
     }
     }
     //判断需要交换的数下标是否为自己
     if (min!=i){
         sums[min] = sums[min]+sums[i];
         sums[i]=sums[min]-sums[i];
         sums[min]=sums[min]-sums[i];
     }
 }//foreach
 for (int n: sums
      ) {
     System.out.println(n);
 }

插入排序算法

每步将一个待排序的记录,按其顺序码大小插入到前面已经排序的子序列的合适位置(从后向前找到合适的位置后),直到全部插入排序完为止。

int[] sums = {25,45,2,68,36,78};
  for (int i=1;i<sums.length;i++){
      int temp = sums[i];
      int j = 0;
      for (j=i-1;j>=0;j--){
          if (sums[j]>temp){
              sums[j+1]=sums[j];
          }else
              break;
      } if (sums[j+1]!=temp){
          sums[j+1] = temp;
      }
  }
  for (int n:sums
       ) {
      System.out.println(n);}

最大最小算法

int[] sums = {25,45,2,68,36,78};
int max=sums[0],min=sums[0];
for (int i=0;i<sums.length;i++) {
    if (sums[i] > max) {
        max = sums[i];
    }if (sums[i]<min) {
        min = sums[i];
    }
}
System.out.println("最大值为"+max);
System.out.println("最小值为"+min);

 

二分查找算法(折半查找)

前提是在有序的数组中,通过将待查找的元素与中间索引值对应元素进行比较,若大于中间索引值对应的元素,去右半部分查找,否则,去左半部分查找。依次类推,直到找到为止,找不到返回一个负数。

/*
/二分查找算法(返回数组下标)数组必须有序
 */
public class Erfen {
    public static  void main(String[] arge){
        int[] num = {10,20,50,66,68,87};
        int index = Search( num,66);
       System.out.println(index);
    }
    public static int Search(int[] num,int key){
        int start = 0;
        int end  = num.length-1;
        while (start<=end){
            int middle = (start+end)/2;
            if (num[middle]>key){
                end = middle-1;
            }else if (num[middle]<key){
                start = middle+1;
            }else{
                return  middle;
            }
        }
        return  -1;
    }
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值