算法
冒泡排序算法
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。
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; } }