算法学习--选择排序和插入排序

1.选择排序

思想:首先,找到数组中最小的那个元素,其次,将它与数组中第一个元素交换位置。然后,在剩下的元素中在找到最小的值,将它与数组中第二个元素交换位置。这种不断选择最小元素的排序称为选择排序。

代码实现:1.首先是比较两个值大小的方法,使用了compareto方法,改方法返回0,1,-1.若v<w返回负1。

 		private static boolean less(Comparable v,Comparable w)
   		 {
       			 return v.compareTo(w)<0;
   		 }
2.交换两个元素的位置

private static void exch(Comparable[] a,int i,int j)
    {
        Comparable t=a[i];
        a[i]=a[j];
        a[j]=t;
    }

3.选择排序算法。

 public static void sort(Comparable[] a){
        int N=a.length;
        for(int i=0;i<N;i++)
        {
            //内循环,将a[i]与a[i+1]到a[n-1]中的最小元素交换
            int min=i;//用min作为最小元素的索引,先假设a[i]为最小元素
            for(int j=i+1;j<N;j++)
            {

//如果a[min]>a[j] 交换

if(less(a[j], a[min])) { min=j; exch(a, min, j); } } } }

2.插入排序

思想:与选择排序一样,当前索引左边的所有元素都是有序地,但他们的最终位置还不确定,所以将大的元素排到右边去,当索引

到达数组的最右边时,排序完成。
代码实现:1.插入排序算法
 public static void SelectSort(Comparable[] a){
        int N=a.length;
        for(int i=0;i<N;i++){
            //内循环中只判断当前索引是否比前一个索引处的值小,如果小,交换位置,保证了当前索引左边的是排序好的。
            for(int j=i;j>0&&less(a[j], a[j-1]);j--)
            {
                exch(a, j, j-1);
            }
        }
    }

3.总结

首先,我们可以发现排序算法的问题,就是不管当前数组是否为有序数组,或者接近有序数组,它都要进行循环。所以这个

算法的效率是不够高的。但是插入算法能够立即发现每个元素是否在合适的位置上,而且循环判断与访问数组的次数明显减少,效率

较快。

 

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值