30 likes | 159 Vues
This document outlines the implementation of the Bubble Sort and Insertion Sort algorithms utilizing linked lists in Python. The Bubble Sort algorithm iteratively compares adjacent elements, swapping them if they are out of order, until the entire list is sorted. The Insertion Sort algorithm builds a sorted sequence one element at a time, ensuring that the first 'i' elements are always sorted. Both algorithms provide proofs of correctness via induction, demonstrating invariants that hold true throughout their execution. Ideal for students and programmers looking to understand sorting techniques.
E N D
Bubble sort (LList,n) not_sorted true; while not_sorted do not_sorted false; cur LList.first; while cur.next NIL do if cur.data> cur.next.data then swap(cur.data,cur.next.data); not_sorted true; cur cur.next;
Bubble sort (LList,n) • for i=1 to n-1 do • cur LList.first; • for j=1 to n-i do • if cur.data> cur.next.data then • swap (cur.data, cur.next.data); • cur cur.next; Invariant 1: j<n, l j, after j iterations of the for-loop at line 3, (j+1)-st el l-th Invariant 2:i<n, after i iterations of thefor-loopat line 1, the last i el’s are “in place” Proof: by induction using Inv.1 Corollary: When i=n-1 all elements are “in place” (sorted) • Proof by induction on j: • Base: j=0 trivial; j=1 obvious. • IH: suppose true for j–1: j-th el is max in [1..j] • IS: after the next iteration of 3-5, (j+1) is the max
Insertion Sort for i= 2 to n doj i;while j>1 AND A[j-1]>A[j] do swap( A[j], A[j-1] ) j j-1 Invariant: at the end of each for-loop iteration the first i elements are in the sorted order