Java基础算法--排序

本文详细介绍了插入排序算法在数组和链表中的实现方式,并提供了两种不同的链表排序实现代码示例。

一、插入排序

  数组:  

 1 void insertionSort(int[] a){
 2     int j;
 3     for(int p = 1;p<a.length;p++){
 4         int tmp = a[p];
 5         for(j=p;j>0;j--){
 6             if(tmp<a[j-1]){
 7                 a[j] = a[j-1];
 8             }else{
 9                 a[i] = tmp;
10             }
11         }    
12     }
13 }

  若是Java泛型掌握的好,可以这样书写

1 void insertionSort(AnyType[] a){
2     int j;
3     for(int p = 1;p < a.length;p++){
4         AnyType tmp = a[p];
5         for(j=p;j>0&&tmp.compareTo(a[j-1])<0;j--)            
6             a[j] = a[j-1];    
7         a[i] = tmp;    
8     }    
9 }

  链表

 1 public class Solution {
 2     public ListNode insertionSortList(ListNode head) {
 3         ListNode dummy = new ListNode(-1);
 4         dummy.next = head;
 5         head = dummy;
 6         ListNode p = dummy.next;
 7         ListNode s;
 8         
 9         while(p!=null){
10             if(p.next==null)  break;
11             while(head!=p&&p.next.val>head.next.val){
12                 head=head.next;
13             }
14             if(head==p)
15                 p=p.next;
16             else{
17                 s = p.next;
18                 p.next = p.next.next;
19                 s.next = null;
20                 
21                 ListNode tmp = head.next;
22                 head.next = s;
23                 s.next = tmp;
24             }
25             head=dummy;
26         }
27         return dummy.next;
28     }
29 }

 另一种于九章算法上的做法:

 1 public class Solution {
 2     public ListNode insertionSortList(ListNode head) {
 3         ListNode dummy = new ListNode(0);
 4 
 5         while (head != null) {
 6             ListNode node = dummy;
 7             while (node.next != null && node.next.val < head.val) {
 8                 node = node.next;
 9             }
10             ListNode temp = head.next;
11             head.next = node.next;
12             node.next = head;
13             head = temp;
14         }
15 
16         return dummy.next;
17     }
18 }

 

转载于:https://www.cnblogs.com/LolaLiu/p/4046280.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值