# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # implementation of visualized insertion sort import argparse import harness import copy def do_insertion(q, a): for n in range(1, len(a)): for i in range(n - 1, -1, -1): if a[i + 1] >= a[i]: break a[i], a[i + 1] = a[i + 1], a[i] q.put(copy.deepcopy(a)) q.put(None) if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument('--len', type=int, help="length of array", required=False, default=100) args = parser.parse_args() harness.SortHarness(do_insertion, args.len).go()
import harness import copy import random def do_bogus(q, a): while not sorted(a): random.shuffle(a) q.put(copy.deepcopy(a)) def sorted(a): '''Is the list already sorted?''' last = a[0] for i in a: if last > i: return False last = i return True if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument('--len', type=int, help="length of array", required=False, default=100) args = parser.parse_args() harness.SortHarness(do_bogus, args.len).go()
# implementation of visualized bubble sort import argparse import harness import copy def do_bubble(q, a): for j in range(len(a) - 1, -1, -1): swapped = False for i in range(0, j): if a[i] <= a[i + 1]: continue a[i], a[i + 1] = a[i + 1], a[i] q.put(copy.deepcopy(a)) swapped = True if not swapped: return if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument('--len', type=int, help="length of array", required=False, default=100) args = parser.parse_args() harness.SortHarness(do_bubble, args.len).go()
k = k + 1 gaps.reverse() return gaps def gen_gaps(alen): '''Generate gaps based on Hibbard, 1963 (O(N**3/2)). 1, 3, 7, 15, 31, 63, ... ''' k = 1 gaps = [] while True: n = (1 << k) - 1 if n >= alen: break gaps.append(n) k = k + 1 gaps.reverse() return gaps if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument('--len', type=int, help="length of array", required=False, default=100) args = parser.parse_args() harness.SortHarness(do_shell, args.len).go()
if lo < hi: p = partition(q, a, lo, hi) do_qsort(q, a, lo, p - 1) do_qsort(q, a, p + 1, hi) def choose_pivot(q, a, lo, hi): return (lo + hi) / 2 def partition(q, a, lo, hi): pivotIndex = choose_pivot(q, a, lo, hi) pivotValue = a[pivotIndex] a[pivotIndex], a[hi] = a[hi], a[pivotIndex] q.put(copy.deepcopy(a)) storeIndex = lo for i in xrange(lo, hi): if a[i] < pivotValue: a[storeIndex], a[i] = a[i], a[storeIndex] q.put(copy.deepcopy(a)) storeIndex = storeIndex + 1 a[storeIndex], a[hi] = a[hi], a[storeIndex] q.put(copy.deepcopy(a)) return storeIndex if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument('--len', type=int, help="length of array", required=False, default=100) args = parser.parse_args() harness.SortHarness(do_qsort, args.len).go()
# Go left to right... for i in xrange(l, r, 1): if a[i] > a[i + 1]: swapped = True a[i], a[i + 1] = a[i + 1], a[i] q.put(copy.deepcopy(a)) r = r - 1 if not swapped: break # Go right to left... for i in xrange(r - 1, l - 1, -1): if a[i] > a[i + 1]: swapped = True a[i], a[i + 1] = a[i + 1], a[i] q.put(copy.deepcopy(a)) l = l + 1 if not swapped: break if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument('--len', type=int, help="length of array", required=False, default=100) args = parser.parse_args() harness.SortHarness(do_cocktail, args.len).go()