排序算法之交换排序-冒泡排序与快速排序

1.冒泡排序

1.1 算法思想

1.1.1 首先将第一个记录和第二个记录进行比较,若为逆序则交换交换两个记录。然后比较第二个记录和第三个记录。以此类推。以上过程称为第一趟排序,其结果使最大的记录被安置到最后一个位置。

1.1.2 然后进行第二趟排序,其结果使次大的记录被安置到第n-1个位置

1.1.3 重复上述操作,直至排序完成

1.2 算法图解

 

 

1.3 代码与结果

public class BubbleSort {
    public static void main(String[] args) {
        int a[]={49,38,65,97,76,13,27,49};
        Bsort(a);
        for(int i=0;i<a.length;i++)
        {
            System.out.print(a[i]+" ");
        }
    }
    public static void Bsort(int a[])
    {
        for(int i=0;i<a.length;i++)
        {
            for(int j=1;j<a.length-i;j++)
            {
                if(a[j-1]>a[j])
                {
                    swap(a,j-1,j);
                }
            }
        }
    }
    public static void swap(int a[],int i,int j)
    {
        int temp=a[i];
        a[i]=a[j];
        a[j]=temp;
    }
}
13 27 38 49 49 65 76 97 

1.4 总结

1.4.1 平均时间复杂度O(n2),空间复杂度O(1);

1.4.2 是稳定排序

 

2.快速排序

2.1 算法思想

2.1.1 选择待排序表中的第一个记录作为枢轴,并记录此枢轴的值temp,并附设两个指针low,high分别指向表的上界和下界

2.1.2 从表的最右侧依次向左搜索,找到第一个关键字小于temp的记录,将其移到low处

2.1.3 从表的最左侧依次向右搜索,找到第一个关键字大于temp的记录,将其移到high处

2.1.4 重复步骤2和3,直至low与high相等。此时low或high的位置即为枢轴在此趟排序中的最终位置,原表被分为两个子表。

2.2 算法图解

 

2.3 代码与结果

public class QuickSort {

    public static void main(String[] args) {
        int a[]={49,38,65,97,76,13,27,49};
        Qsort(a,0,a.length-1);
        for(int i=0;i<a.length;i++)
        {
            System.out.print(a[i]+" ");
        }
    }

    public static void Qsort(int a[],int low,int high)
    {
        if(low<high)
        {
            int posLoc = partition(a,low,high);
            Qsort(a,low,posLoc-1);
            Qsort(a,posLoc+1,high);
        }
    }

    public static int partition(int a[],int low,int high)
    {
        int temp=a[low];
        while(low<high)
        {
            while(low<high&&a[high]>temp) high--;
            a[low]=a[high];
            while (low<high&&a[low]<temp) low++;
            a[high]=a[low];
        }
        a[low]=temp;
        return  low;
    }

}
13 27 38 49 49 65 76 97 

2.4 总结

2.4.1 平均时间复杂度O(nlogn)

2.4.2 最大递归调用次数与递归树的深度一致,最好的空间复杂度为(logn),最坏的空间复杂度为O(n)

2.4.3 是不稳定排序,适合初始记录无序,n较大的情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值