冒泡,选择,快速排序

马上要面试了,温习一下基础算法,本文快速排序参考博文.

算法最重要的是理解,最好自己写一遍,so...

冒泡:

思路:两个for循环,外层控制循环次数,为数组长度减一,里层控制比较次数,是逐级递减的,所以需要减去i的值.代码实现:

//冒泡排序(升序)
public void bubbleSort(int[] a){
    int temp;
    //控制循环的次数,数组长度-1
    for(int i=1;i a[j+1]){
                temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            }
        }
    }
}

选择:

思路:两个for循环,每次循环都将找到一个最小(大)值放在外层循环次数 i 的位置,里层循环进行比较,然后交换最小值的位置,最后再进行交换.代码实现:

//选择排序(升序)   
public void selectSort(int[] a){
    int temp;
   //循环开始,次数为数组长度-1
    for(int i=0;i

快速排序

思路:个人理解,这种方法类似二分法,也是找寻"中间位置",不过这种方式是先定义一个基数,比这个小的放左边,比这个大的放右边,返回这个"中间"位置,再细分,每次细分都要进行判断是否"最左边"是否小于"最右边".当"最左边"等于"最右边"的时候,将基数放入那个位置,代码实现:

//快速排序
public void quickSort(int a[],int left,int right){
    if(left < right){
        int i=left,j=right;
        int x= a[left];
        while(i=x){
                j--;
            }
            //找到就交换值,然后i+1
            if(i

注意:前面for循环的时候尽量将a.length赋值给一个确切变量,这对提升速率可是很有帮助的.

你可能感兴趣的:(冒泡,选择,快速排序)