常用排序(冒泡、快速、选择)

来源:互联网 发布:javascript排序 编辑:程序博客网 时间:2024/06/06 00:13

常见排序算法01


1、冒泡排序

冒泡排序思想是从头开始扫描待排序的元素,在这过程中相邻两个元素之间进行比较,将较大的数向后移,(即大数向下沉,小数向上冒),经过从头到尾的一次扫描后,当前最大的数就会被移动到最后一位了,然后记下这个位置,下一次扫描只需扫描到这个位置即可(即第i次扫描需要比较n-i次)。第i次扫描会将一个第i大的数排到倒数第i位上。

代码实现:

public void MPsort(){    for (int i = 0; i < a.length; i++) {       for (int j = 0; j < a.length-1-i; j++) {          if(a[j]>a[j+1]){            temp = a[j];            a[j] = a[j+1];            a[j+1] = temp;        }     }   }}

2、快速排序

快速排序思想是在所要排序的序列中找一个数作为基准数(pivot),一般选择所要比较的序列中第一个数,然后将比基准数大的放在基准数的右边,比基准数小的放在其左边。这样经过一次排序后,这个基准数的位置就会确定下来了。确定这个基准数后再对其左右两边的数分别做以上操作,最终即可确定所要数的位置了。

举例说明:(图片来源网上)
如图所示,有10位数组成的序列。设置两个哨兵,令哨兵i指向第一个元素,则6为当前基准数,令j指向最后一个元素。
这里写图片描述
首先令哨兵j开始向左移动,直至找到一个比基准数6小的数,如图找到数字5;然后哨兵i开始向右移动,直至找到一个比基准数6大的数,如图找到7.然后将5和7进行交换。
这里写图片描述
这里写图片描述
第一次交换结束后,j继续移动,找到4;i移动,找到9,将4和9进行交换。
这里写图片描述
这里写图片描述
最后,i和j在3的前面相遇,这时一次扫描完成,将基准数与3交换,此时基准数6的位置已经确定了。
这里写图片描述
这里写图片描述
在这之后,分别考虑6左边的序列3,1,2,5,4和其右边的序列9,7,10,8即可。(使用递归)

代码实现:

    public static void quicksort(int left,int right){        int pivot = a[left];//基准数        int i = left,j = right;        int temp;        if(i>=j){//只有一个元素做比较时            return;        }        while(i!=j){            //要先从右边开始,找小于pivot的数            while(i<j&&a[j]>=pivot){                j--;            }            //再找左边大于pivot的数            while(i<j&&a[i]<=pivot){                i++;            }            //交换            if(i<j){                temp = a[i];                a[i] = a[j];                a[j] = temp;            }        }        //此时i,j相遇(i=j),则将基准与a[i]交换        a[left] = a[i];        a[i] = pivot;        //使用递归,分别处理当前基准的左右两边        quicksort(left,i-1);        quicksort(i+1,right);    }

3、 选择排序

在需要排序的序列中选出最小的元素,然后与第一个元素交换,接着在剩下的元素中选出最小的与第二个元素交换,以此类推。

代码实现:

    public void selectSort(){        int position = 0,temp = 0;        for (int i = 0; i < a.length; i++) {            temp = a[i];            position = i;//当前最小元素下标            for (int j = i+1 ; j < a.length; j++) {                if(a[j]<temp){                    temp = a[j];                    position = j;                }            }            a[position] = a[i];            a[i] = temp;        }           }
0 0
原创粉丝点击