單鏈表排序

2021-08-02 03:25:26 字數 1051 閱讀 8620

1、歸併排序:

將鍊錶拆分成兩個鍊錶,遞迴,歸併,將兩個已排序鍊錶合併

public listnode sortlist(listnode head) 

pre.next = null;

return merge(sortlist(head), sortlist(slow));

}public listnode merge(listnode l1, listnode l2) else

cur = cur.next;

}if (l1 != null) cur.next = l1;

if (l2 != null) cur.next = l2;

return dummy.next;

}

2、快速排序

根據普通快排的思路,選擇1個點為中心點,保證中心點左邊比中心點小,中心點右邊比中心點大即可.

單鏈表的實現為:

1.使第乙個節點為中心點.

2.建立2個指標(p,q),p指向頭結點,q指向p的下乙個節點.

3.q開始遍歷,如果發現q的值比中心點的值小,則此時p=p->next,並且執行當前p的值和q的值交換,q遍歷到鍊錶尾即可.

4.把頭結點的值和p的值執行交換.此時p節點為中心點,並且完成1輪快排

5.使用遞迴的方法即可完成排序

public listnode sortlist(listnode head) 

quicksort(head, end);

return head;

}public

void quicksort(listnode begin, listnode end)

}second = second.next;

}//判斷,有些情況是不用換的,提公升效能

if (begin != first)

//前部分遞迴

quicksort(begin, first);

//後部分遞迴

quicksort(first.next, end);

}

單鏈表之排序單鏈表

package list public class sortedsinglylist extends singlylist 將values陣列中的所有物件按值大小插入 public sortedsinglylist t values 過載深拷貝,由單鏈表構建排序單鏈表 public sortedsi...

單鏈表排序

思路1 將鍊錶中的資料存入陣列中,使用陣列進行排序,排好後再存入鍊錶中。當然這並不是這題所要考察的。但是在實際應用中卻相當有價值。因為鍊錶中的排序演算法都比較慢,進行轉存再排序也是一種很好的方法。思路2 排序演算法有 1,插入排序 簡單插入排序,希爾排序 2,交換排序 氣泡排序,快速排序 3,選擇排...

單鏈表排序

思路 sort排序函式執行一次,將鍊錶倆倆之間比較大小,比較之後,大的在後,小的在前 鍊錶節點之間只交換內容,節點不動 只有鍊錶的所有倆倆相鄰之間都是小的在前,大的在後,才返回true,否則返回false。while sort head include include include include...