Esempio n. 1
0
# 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()
Esempio n. 2
0
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()
Esempio n. 3
0
# 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()
Esempio n. 4
0
        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()
Esempio n. 5
0
        
    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()
Esempio n. 6
0
        # 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()