ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[toc] ### 冒泡排序算法 冒泡排序算法的运作如下: 1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2.对每一个相邻元素做相同的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该是最大的数。 3.针对所有的元素重复以上步骤,**除去最后一个**。 4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 ps:相同元素的前后顺序并没有改变,所以**冒泡排序是一种稳定排序算法**。 ~~~ //外循环控制轮数; for(int i=0;i<len-1;i++) { //内循环交换 for(int j=0;j<len-1-i;j++) { if(num[j]>num[j+1]) {                 //交换j和j+1 num[j]=num[j]+num[j+1]; num[j+1]=num[j]-num[j+1]; num[j]=num[j]-num[j+1]; } } } ~~~ ### 选择排序 选择排序算法: 先把第一个元素作为最小(大)值 每一趟从待排序的数据元素中选出最小(或最大)的一个元素, 顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完为止。 **选择排序是不稳定的排序方法。** ~~~ int minIndex = 0;   for(int i=0;i<num.length-1;i++) { minIndex = i;//每轮假设一个最小值下标 for(int j=i+1;j<num.length;j++) { if(num[minIndex]>num[j]) { minIndex = j; } } //判断需要交换的数下标是否为自己 if(minIndex!=i) {             交换minIndex和i num[i]=num[minIndex]+num[i]; num[minIndex]=num[i]-num[minIndex]; num[i]=num[i]-num[minIndex]; } } ~~~ ### 直接插入排序算法 (从后向前找到合适位置后插入) 基本思想:每步讲一个待排序的记录,按其顺序码大小插入到前面已经排序的子字序列合适位置 (从后向前找到合适位置后),直到全部插入排序为止。 ~~~ int [] num = {34,4,56,17,90,65}; //控制比较的轮数 for(int i=1;i<num.length;i++) { int temp = num[i];//记录操作数 int j=0; for(  j=i-1;j>=0;j--) { if(num[j]>temp) { num[j+1]=num[j]; }else { break; } } if(temp != num[j+1]) { num[j+1] = temp; } } for(int n:num) { System.out.println(n); } ~~~ ### 二分法查找(折半查找) **前提是在已经排好序的数组中**,通过将待查找的元素与中间索引值对应的元素进行比较,若大于中间索引值对应的元素,去右半部分查找,否则,去左半部分查找。依次类推,直到找到为止;找不到返回负数。 ~~~ //二分查找算法 public static int binarySearch(int [] num,int key) { int start = 0;         //开始下标 int end = num.length-1;//结束下标 while(start<=end) { int middle = (start+end)/2; if(num[middle]<key) { start = middle +1; }else if(num[middle]>key) { end = middle -1; }else{ return middle; } } return -1; } ~~~