初学算法之排序集

大晚上睡不着呢,下了本算法导论,电子版的,书的太贵了==,承受不起啊。。

第一个算法是插入排序,不管会不会吧,都再重新复习一下

注:以下所有算法都将是自己手打,绝不看书,也算是对自己的一个要求吧。

1.插入排序

private static void  insertsort(int[] a){
		int j=0;
		int key;
		for (int i =1; i < a.length; i++) {
		   j=i;
		   key=a[i];
		   if(a[j-1]>key){
			   while(j>=1&&a[j-1]>key){
				   a[j]=a[j-1];
				   j--;
			   }
			   a[j]=key;
		   }
			
		}
	}

就先写这么点吧。。毕竟时间有限了。这个算法形象一点就描述就像我们玩牌的时间把牌把从小到大插起来一样,有时间再补、

2.快速排序

void QuickSort(T a[],int p,int r){  
     if (p<r){  
        int q=partion(a,p,r);  
        QuickSort(a,p,q-1);  
        QuickSort(a,q+1,r);  
    }  
 }  
 int partion(T a[],int p,int r){  
     T x = a[r];        
     int middle = p;     
     for (int j = p ; j < r ; j++){  
        if (a[j] < x){  
             T temp  = a[middle];  
             a[middle] = a[j];  
             a[j] = temp;  
             middle++;  
         }  
     }  
     T temp = a[r];  
     a[r]     = a[middle];  
     a[middle] = temp;  
    return middle;  
}  

quicksort方法是将数组下标p到r的范围之间的数字进行排序,这里我用的是泛型因为可以通用嘛,都先要判断p与r之前的大小 关系 ,这就是常说的容错处理,然后能用调用partion这个方法找到q。

partion这个方法的作用是先找到最后一个数作为中间比较数的值。然后从下标q开始遍历,直到找到那个比刚才比较数小的值,然后作交换。最后将比较的数与middle作交换。 返回的是middle 也就是那个下标

然后再调用本身,这是一个间接递归的过程,用的算法思想是分治的思想,将这个下标从p到r的数组分成了两部分分别进行排序,然后再继续分。这样最后的结果就是将整个一个数组分成了几个小部分。

第一次遍历将所有比最后一个数小的数全都放到它的前面。所有比它大的数就在它的后面了。返回的数是分成两个部分的中间的结果数组,然后如此反复就完成了整个数组的排序 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值