java常用排序算法(一)

来源:互联网 发布:获取php版本号 编辑:程序博客网 时间:2024/06/06 03:15
冒泡排序算法
比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。
相同元素前后顺序并没有改变,所以冒泡排序是一种稳定排序算法

总结:每次判断大的放到最后

代码:

 //冒泡排序
     int num[]={36,4,54,98,86,65};
     //第一次循环5次,第二次循环4次
     for(int i=0;i<num.length-1;i++){//循环的次数
     for(int j=0;j<num.length-1-i;j++){//j<5
    if(num[j]>num[j+1]){
    num[j]=num[j]+num[j+1];
    num[j+1]=num[j]-num[j+1];
    num[j]=num[j]-num[j+1];
    }
     }
     }
     for(int i=0;i<num.length;i++){
     System.out.println(num[i]);
     }
}


选择排序算法
每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好的数列的最后,知道全部待排序数据元素排完
选择排序是不稳定的排序

总结:首先选择最小的放到首或者尾

代码:

// 选择排序
int num[] = { 36, 4, 54, 98, 86, 65 };
for (int i = 0; i < num.length - 1; i++) {// 循环次数
int minnum = i;
for (int j = i + 1; j < num.length; j++) {
if (num[minnum] > num[j]) {
minnum = j;
}
}
if (minnum != i) {
num[minnum] = num[minnum] + num[i];
num[i] = num[minnum] - num[i];
num[minnum]=num[minnum]-num[i];
}
}
for(int n:num){
System.out.println(n);
}
}
/**
* 第一次 4 36 54 98 86 65 
* 第二次 4 36 54 98 86 65 
* 第三次 4 36 54 98 86 65 
* 第四次 4 36 54 65 98 86 
* 第五次 4 36 54 65 96 98
*/

直接插入排序算法
从后向前找到合适的位置后插入
基本思想:每步将一个待排序的记录,将其顺序码大小插入到前面已经排序的子序列的合适位置(从后向前找到合适的位置后),直到全部插入排序完为止
二分查找算法

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

代码:

// 直接插入排序算法
int num[] = { 36, 4, 54, 98, 86, 65 };
for (int i = 1; i < num.length; i++) {// 循环次数
int temp = num[i];//4 54
int j = 0;
for (j = i - 1; j >= 0; j--) {// 从后往前插入
if (temp < num[j]) {//4<36   54<36
num[j + 1] = num[j];
// 第一轮 36 36
} else {
break;
}


}
//结束后j=-1
if (temp != num[j+1]) {
num[j + 1] = temp;//4,36
}
}
for(int n:num){
System.out.println(n);
}

Arrays工具类

二分查找:

                int[] num = { 50, 52, 56, 70, 75, 95, 99, 100 };
int index=Arrays.binarySearch(num, 99);
System.out.println(index);

输出数组:Arrays.toString(数组)
数组排序:Arrays.sort(int[] array)