java各种算法

来源:互联网 发布:机顶盒mac地址绑定 编辑:程序博客网 时间:2024/06/07 01:22

public static int[] getResult(int[] b){int len = b.length;for(int i=0;i<len-1;i++){for(int j=0;j<len-i-1;j++)  {if(b[j]>b[j+1]){int a=b[j];b[j] =b[j+1];b[j+1] = a;}}}return b;}

冒泡排序

//

1,首先最外层循环决定需要进行几轮比较,比如长度为n的数组,至少需要进行n-1轮比较。

2,里面的循环则是数组中的每一个数与后面的一个数进行比较,如果大小不等,则替换位置,里面每循环一次比较出当前多个数字中的最大值,并排在队末并且下一次循环所比较的次数会减少,因为决定了大小的数字不需要再次进行比较。

/** * 找出数组中的 最小值 */public static int getMin(int[] a){int min = a[0];//假设最小值为数组中的第一个元素。for(int i=0;i<a.length;i++){if(min>a[i])//如果最小值大于数组中的某一个数,则将该数赋值给最小值。{min = a[i];}}return min;}

快速排序:

/** * * 快速排序 * @param a 传入要排序的集合或者数组 * @param left 用于排序的左边指针 * @param right 用于排序的右边指针 */public static void  speedSort(int left,int right,int[] a){if(left>right) return;//当坐标指针大于右边指针时,结束递归调用(此时排序的数仅有一个,就可以直接退出了。)int temp = a[left];//设置一个基准值,通常为集合第一个元素。int length = a.length;int _left = left;//设置一个临时变量,我们可以叫它为左指针,从左到右扫描int _right = right;//同理右指针,从右往左扫描if(length>=2)//当数组长度大于等于2,排序才有意义。{while(_left!=_right)//当坐标指针与右边指针不等时,即指向的不是同一个位置。{//System.out.println("cccc");while(_right>_left&&a[_right]>=temp)//当右指针位置 指向的数字小于基准数时,则退出循环,否则一直向左移动。{_right--;//}while(_left<_right&&a[_left]<=temp)//当左指针位置 指向的数字大于基准数时,则退出循环,否则一直向右移动。{_left++;}if(_left<_right)//左指针指向的数大于基准数,而右边指针的指向的数小于基准数,此时替换相应元素的位置{int c = a[_left];a[_left]=a[_right];a[_right] = c;}}//再将基准数与此时指针指向的数替换位置,则,在基准数左边的为小于它的,右边为大于它的。int d = a[_left];a[_left] = a[left];a[left] = d;//基准数左边与右边的数顺序还未定,需要递归调用此方法。speedSort(left,_left-1,a);//排序剩余左边数speedSort(_right+1,right,a);//排序剩余右边数}}

选择排序:

思路:在一堆数中找出最小的数,放到第一个数的位置,然后再从剩下的数字中找出最小的数放到第二个,以此类推,最终可排序。

/** * 选择排序 */public static void selectSort(int[] a,int j){//方法一,j的初始值传0if(j==a.length) return;int min = Integer.MAX_VALUE;int k=-1;for(int i=j;i<a.length;i++){if(min>a[i]){min = a[i];k =i;}}    int c = a[k];    a[k] = a[j];    a[j] = c;    selectSort(a,j+1);}public static void selectSort1(int[] a){//方法二int k=-1;//最小数对应的序号for(int n=0;n<a.length;n++){int min = Integer.MAX_VALUE;//每次循环都将最小值重新赋值为Interger所能表示的最大值,已保证每次循环第一次比较能被替换for(int i=n;i<a.length;i++){if(min>a[i]){min = a[i];k =i;}}    int c = a[k];//找到剩余数中的最小值,与第n个数进行替换。    a[k] = a[n];    a[n] = c;}}


下面为比较详细的图解。来自其他博友。

点击打开链接

原创粉丝点击