Example #1
0
def test_avg_case_quick_sort():
    data = gen_random_u_array()
    sorted_data = SortedList(data)

    quick_sort(data, 0, len(data) - 1)

    assert np.array_equal(data, sorted_data)
Example #2
0
 def test_none(self):
     array = None
     # one way to test for exceptions using a context manager
     with self.assertRaises(TypeError):
         quick_sort(array)
     # another way to test for exceptions using a function
     self.assertRaises(TypeError, quick_sort, array)
Example #3
0
def test_worst_case_quick_sort():
    data = gen_sorted_array()
    sorted_data = SortedList(data)

    quick_sort(data, 0, len(data) - 1)

    assert np.array_equal(data, sorted_data)
Example #4
0
def quick_sort(arr, low, high):
    if low < high:
        # 用mid进行划分(避免顺序或逆序时最坏复杂度)
        mid = (low + high) // 2
        arr[low], arr[mid] = arr[mid], arr[low]
        pivot_pos = partition(arr, low, high)
        quick_sort(arr, low, pivot_pos - 1)
        quick_sort(arr, pivot_pos + 1, high)
def test_sort():
    """Simple test"""
    arr1 = [5, -10, 50, 2, 0, 11]
    arr2 = [0, 0, 0, 1]
    arr3 = [-100, 0, 100]
    assert quick_sort(arr1.copy()) == sorted(arr1.copy())
    assert quick_sort(arr2.copy()) == sorted(arr2.copy())
    assert quick_sort(arr3.copy()) == sorted(arr3.copy())
Example #6
0
def visualize_quick_sort(lst, vis):
    start_time = time.perf_counter_ns()
    sort.quick_sort(lst, 0, len(lst) - 1, vis)
    end_time = time.perf_counter_ns()

    vis.replay(0)
    vis.reset()

    print('Quick Sort')
    print(f'Time: {end_time - start_time:,}ns\n')
Example #7
0
def main():
    strategy = sys.argv[1] if len(sys.argv) > 1 else 'first'
    numbers = [int(l.strip()) for l in sys.stdin.readlines() if l.strip()]
    assert numbers[0] == 2148
    assert numbers[-1] == 9269
    cost = quick_sort(numbers, strategy=strategy)
    print(cost)
Example #8
0
def item_cf(file_path, n=-1):
    """
    Making recommendation via item_cf.
    This function try to return a recommendation like:
    rec={
        user:{
            item:pred
        }
    }
    """

    if n == 0:
        return {{}}

    #load data
    data_model = RecDataModel(file_path)
    data_model.load_item_model()
    data_model.load_user_model()
    data_model.avg_item_model()
    item_list = data_model.get_item_list()

    #compute item similarity
    item_sim = {}
    for i in item_list:
        item_sim[i] = {}
    for i in range(len(item_list)):
        item_i = item_list[i]
        for j in range(i, len(item_list)):
            item_j = item_list[j]
            rate_i, rate_j = data_model.get_item_union(item_i, item_j)
            acos = adjust_cos(rate_i, rate_j)
            if i == j: acos = 0.0
            item_sim[item_i][item_j] = acos
            item_sim[item_j][item_i] = acos

    #make rec
    rec = {}
    user_list = data_model.get_user_list()
    for u in user_list:
        rec_u = {}
        rate_u = data_model.get_user_vec(u)
        for i in item_list:
            if i not in rate_u:
                i_sim = item_sim[i]
                fenzi = 0.0
                fenmu = 0.0
                for ui in rate_u:
                    fenzi += rate_u[ui] * i_sim[ui]
                    fenmu += i_sim[ui]
                if fenmu != 0:
                    rec_u[i] = fenzi / fenmu
                else:
                    rec_u[i] = 0.0
        if n != -1:
            items, pred = quick_sort(rec_u, r=True)
            rec_u = {}
            for i in range(n):
                rec_u[items[i]] = pred[i]
        rec[u] = rec_u
    return rec
Example #9
0
    def test_sort(self):
        # Set up array to sort
        array_len = 1024
        max_value = 1024
        x = [random.randint(0, max_value) for i in range(array_len)]

        # Insertion sort
        self.assertEqual(sort.insertion_sort(x), sorted(x))

        # Merge sort
        self.assertEqual(sort.merge_sort(x), sorted(x))
        
        # Selection sort
        self.assertEqual(sort.selection_sort(x), sorted(x))
        
        # Bubble sort
        self.assertEqual(sort.bubble_sort(x), sorted(x))

        # Heap sort
        self.assertEqual(sort.heap_sort(x), sorted(x))

        # Quick sort
        self.assertEqual(sort.quick_sort(x), sorted(x))

        # Quick sort v2
        self.assertEqual(sort.quick_sort_v2(x), sorted(x))
Example #10
0
def item_cf(file_path, n=-1):
    """
    Making recommendation via item_cf.
    This function try to return a recommendation like:
    rec={
        user:{
            item:pred
        }
    }
    """

    if n == 0:
        return {{}}

    #load data
    data_model = RecDataModel(file_path)
    data_model.load_item_model()
    data_model.load_user_model()
    data_model.avg_item_model()
    item_list = data_model.get_item_list()

    #compute item similarity
    item_sim = {}
    for i in item_list:
        item_sim[i] = {}
    for i in range(len(item_list)):
        item_i = item_list[i]
        for j in range(i, len(item_list)):
            item_j = item_list[j]
            rate_i, rate_j = data_model.get_item_union(item_i, item_j)
            acos = adjust_cos(rate_i, rate_j)
            if i == j: acos = 0.0
            item_sim[item_i][item_j] = acos
            item_sim[item_j][item_i] = acos

    #make rec
    rec = {}
    user_list = data_model.get_user_list()
    for u in user_list:
        rec_u = {}
        rate_u = data_model.get_user_vec(u)
        for i in item_list:
            if i not in rate_u:
                i_sim = item_sim[i]
                fenzi = 0.0
                fenmu = 0.0
                for ui in rate_u:
                    fenzi += rate_u[ui] * i_sim[ui]
                    fenmu += i_sim[ui]
                if fenmu != 0:
                    rec_u[i] = fenzi / fenmu
                else:
                    rec_u[i] = 0.0
        if n != -1:
            items, pred = quick_sort(rec_u, r=True)
            rec_u = {}
            for i in range(n):
                rec_u[items[i]] = pred[i]
        rec[u] = rec_u
    return rec
Example #11
0
def test_quick_sort():
    print "\nQuick sort test begin"
    count = random.randint(100, 1000)
    for _ in range(count):
        length = random.randint(5, 30)
        source = tool.random_list(0, 100, length)
        target = sort.quick_sort(source)
        if tool.list_is_ascend(target) is False:
            print source
            print target
            print ""
            assert (tool.list_is_ascend(target))
    print "Quick sort success in {0} times.\n".format(count)
Example #12
0
def slope_one(file_path, n=-1):
    """
    Making recommendation via slope one.
    This function try to return a recommendation like:
    rec={
        user:{
            item:pred
        }
    }
    """

    #load data model
    data_model = RecDataModel(file_path)
    data_model.load_user_model()
    data_model.load_item_model()
    item_list = list(data_model.get_item_list())
    user_list = list(data_model.get_user_list())

    #compute dev(i,j)
    dev = {}
    tmp = {}
    for i in item_list:
        tmp[i] = (0.0, 0)
    for i in item_list:
        dev[i] = tmp
    for i in range(len(item_list)):
        rate_i = data_model.get_item_vec(item_list[i])
        if rate_i and len(rate_i) > 0:
            for j in range(i, len(item_list)):
                if i != j:
                    rate_j = data_model.get_item_vec(item_list[j])
                    if rate_j and len(rate_j) > 0:
                        dev_ij = 0.0
                        dev_count = 0
                        for iu in rate_i:
                            if iu in rate_j:
                                dev_ij += rate_i[iu] - rate_j[iu]
                                dev_count += 1
                        if dev_count > 0:
                            dev_ij /= dev_count
                            dev[item_list[i]][item_list[j]] = (dev_ij, dev_count)
                            dev[item_list[j]][item_list[i]] = (dev_ij, dev_count)

    #make rec
    rec = {}
    for u in user_list:
        print u
        rate_u = data_model.get_user_vec(u)
        rec_u = {}
        for i in item_list:
            if i not in rate_u:
                pred = 0.0
                count = 0.0
                i_dev = dev.get(i)
                for iu in rate_u:
                    dev_ij, dev_count = i_dev[iu]
                    pred += (rate_u.get(iu) - dev_ij) * dev_count
                    count += dev_count
                if count > 0:
                    rec_u[i] = pred / count
                else:
                    rec_u[i] = 0.0
        if n != -1:
            items, pred = quick_sort(rec_u, r=True)
            rec_u = {}
            for i in range(n):
                rec_u[items[i]] = pred[i]
        rec[u] = rec_u
    return rec
Example #13
0
def user_cf(file_path, k=100, n=-1):
    """
    Making recommendation via user_cf.
    :param k use for set the length of similar user set.
    :param n use for top-n rec, default is -1, while n equals -1 show all recommended result .
    """

    if n == 0:
        return {{}}

    #Load data.
    data_model = RecDataModel(file_path)
    data_model.load_user_model()
    data_model.load_item_model()

    #Get similar user set.
    user_list = data_model.get_user_list()
    similarity_set = {}
    for i in user_list:
        tmp_set = {}
        for j in user_list:
            if i != j:
                a, b = data_model.get_corate(i, j)
                tmp_set[j] = pearson(a, b)
        users, similarity = quick_sort(tmp_set, r=True)
        tmp_set = {}
        for u in range(k):
            tmp_set[users[u]] = similarity[u]
        similarity_set[i] = tmp_set

    #make rec.
    rec = {}
    for u in similarity_set:
        rate_u = data_model.get_user_vec(u)
        rec_par = {}
        rec_u = {}
        tmp_set = similarity_set.get(u)
        for su in tmp_set:
            rate_su = data_model.get_user_vec(su)
            for item in rate_su:
                if item not in rate_u:
                    if item not in rec_par:
                        #su rate, su avg, similarity
                        param = [(rate_su.get(item), data_model.get_user_avg(su), tmp_set.get(su))]
                        rec_par[item] = param
                    else:
                        param = rec_par.get(item)
                        param.append((rate_su.get(item), data_model.get_user_avg(su), tmp_set.get(su)))
                        rec_par[item] = param

        for item in rec_par:
            avg_item = data_model.get_item_avg(item)
            fenzi = 0.0
            fenmu = 0.0
            for su_rate, avg_su, simi in rec_par.get(item):
                fenzi += (su_rate - avg_su) * simi
                fenmu += simi
            fenmu += 1
            rec_u[item] = avg_item + fenzi / fenmu

        if n != -1:
            items, pred = quick_sort(rec_u, r=True)
            rec_u = {}
            for i in range(n):
                rec_u[items[i]] = pred[i]
        rec[u] = rec_u
    return rec
Example #14
0
def main():
    win = gp.GraphWin('sortpy', WINDOW_X, WINDOW_Y, autoflush=False)
    win.setBackground(color=gp.color_rgb(43, 137, 164))

    print_logo()
    first_input = True
    while 1:
        clear_screen(win)
        ds = sort.generate_dataset(sort.DATA_NUM, repeat=False)
        bars = []
        draw_bars(ds, win, bars)
        sort.playback_list = []

        valid_command = False
        if first_input:
            command = input('Type help to view commands\n')
            first_input = False
        else:
            command = input('')
        while not valid_command:
            if command == 'help':
                print_header('Sorting algorithms')
                print_subheader('Bubble sorts')
                print_command('bubble', 'Bubble sort')
                print_command('cocktail', 'Cocktail shaker sort')
                print_command('comb', 'Comb sort')
                print_command('oddeven', 'Odd-even sort')
                print_subheader('Insertion sorts')
                print_command('insertion', 'Insertion sort')
                print_command('shell', 'Shellsort')
                print_command('gnome', 'Gnome sort')
                print_subheader('Divide and conquer')
                print_command('merge', 'Merge sort')
                print_command('quick', 'Quicksort')
                print_subheader('Other')
                print_command('selection', 'Selection sort')
                print_command('stooge', 'Stooge sort')

                print_header('Options')
                print_command('quit', 'Exit sortpy')

                print('\n')
                print('Click on the window after sorting finishes to select a new algorithm')
                command = input('\n')
            elif command == 'bubble':
                valid_command = True
            elif command == 'cocktail':
                valid_command = True
            elif command == 'comb':
                valid_command = True
            elif command == 'oddeven':
                valid_command = True
            elif command == 'insertion':
                valid_command = True
            elif command == 'shell':
                valid_command = True
            elif command == 'gnome':
                valid_command = True
            elif command == 'merge':
                valid_command = True
            elif command == 'quick':
                valid_command = True
            elif command == 'selection':
                valid_command = True
            elif command == 'stooge':
                valid_command = True
            elif command == 'quit':
                win.close()
                return
            else:
                print('Command not found - type help to view commands')
                command = input('\n')

        sort.playback_list.append(ds[:])
        if command == 'insertion':
            sort.insertion_sort(ds)
        elif command == 'bubble':
            sort.bubble_sort(ds)
        elif command == 'cocktail':
            sort.cocktail_sort(ds)
        elif command == 'selection':
            sort.selection_sort(ds)
        elif command == 'merge':
            sort.merge_sort(ds, 0, sort.DATA_NUM - 1)
        elif command == 'quick':
            sort.quick_sort(ds, 0, sort.DATA_NUM - 1)
        elif command == 'shell':
            sort.shell_sort(ds)
        elif command == 'gnome':
            sort.gnome_sort(ds)
        elif command == 'oddeven':
            sort.odd_even_sort(ds)
        elif command == 'comb':
            sort.comb_sort(ds)
        elif command == 'stooge':
            sort.stooge_sort(ds, 0, sort.DATA_NUM - 1)
        sort.playback_list = remove_duplicates(sort.playback_list)
        play_animation(ds, win, bars)
        win.getMouse()
Example #15
0
 def test_sort_odd_elements(self):
     array = [6, 2, 5, 8, 1, 3, 7, 4, 0]
     self.assertEqual(quick_sort(array), list(range(9)))
Example #16
0
print ("я║тЯеепРсцй╠: % s"  %(time.clock() - time_start) )

# ╡ЕхКеепР
random.shuffle(ls)
time_start = time.clock()
sort.insert_sort(ls)
print ("╡ЕхКеепРсцй╠: % s"  %(time.clock() - time_start) )

# оё╤ШеепР
random.shuffle(ls)
time_start = time.clock()
sort.shell_sort(ls)
print ("оё╤ШеепРсцй╠: % s"  %(time.clock() - time_start) )

# ╧И╡╒еепР
random.shuffle(ls)
time_start = time.clock()
sort.merge_sort(ls)
print ("╧И╡╒еепРсцй╠: % s"  %(time.clock() - time_start) )

# ©ЛкыеепР
random.shuffle(ls)
time_start = time.clock()
sort.quick_sort(ls)
print ("©ЛкыеепРсцй╠: % s"  %(time.clock() - time_start) )

# ╤яеепР
random.shuffle(ls)
time_start = time.clock()
sort.heap_sort(ls)
print ("╤яеепРсцй╠: % s"  %(time.clock() - time_start) )
Example #17
0
def cpu_bounded_func_quick(n=CPU_FUNC_NUMBER):
    return quick_sort(n)
Example #18
0
def get_po(po):
    if po not in data:
        abort(404)
    to_sort = data[po]['lines']
    sorted = sort.quick_sort(to_sort, 0, len(to_sort) - 1)
    return jsonify(sorted)
Example #19
0
list_large = []
for i in range(50000):
    list_large.append(random.randint(1, 100))
print 'size:50000, for the faster ones'

timer.get_time(time.clock(), False)  #update time

print 'merge sort\n'
list = sort.merge_sort(list_large[:])
assert sort.check_sorted(list)
timer.get_time(time.clock())
print ''

print 'quick sort\n'
list = sort.quick_sort(list_large[:])
assert sort.check_sorted(list)
timer.get_time(time.clock())
print ''

print 'quick sort rand\n'
list = sort.quick_sort(list_large[:], rand=True)
assert sort.check_sorted(list)
timer.get_time(time.clock())
print ''

print 'counting sort\n'
list = sort.counting_sort(list_large[:])
assert sort.check_sorted(list)
timer.get_time(time.clock())
print ''
Example #20
0
 def test_single_item_array(self):
     array = [6]
     self.assertEqual(quick_sort(array), array)
Example #21
0
 def test_sort_four_elements(self):
     array = [6, 2, 4, 9]
     self.assertEqual(quick_sort(array), [2, 4, 6, 9])
Example #22
0
 def test_sort_three_elements(self):
     array = [6, 2, 4]
     self.assertEqual(quick_sort(array), [2, 4, 6])
Example #23
0
 def test_sort_two_elements(self):
     array = [6, 2]
     self.assertEqual(quick_sort(array), [2, 6])
Example #24
0
print("я║тЯеепРсцй╠: % s" % (time.clock() - time_start))

# ╡ЕхКеепР
random.shuffle(ls)
time_start = time.clock()
sort.insert_sort(ls)
print("╡ЕхКеепРсцй╠: % s" % (time.clock() - time_start))

# оё╤ШеепР
random.shuffle(ls)
time_start = time.clock()
sort.shell_sort(ls)
print("оё╤ШеепРсцй╠: % s" % (time.clock() - time_start))

# ╧И╡╒еепР
random.shuffle(ls)
time_start = time.clock()
sort.merge_sort(ls)
print("╧И╡╒еепРсцй╠: % s" % (time.clock() - time_start))

# ©ЛкыеепР
random.shuffle(ls)
time_start = time.clock()
sort.quick_sort(ls)
print("©ЛкыеепРсцй╠: % s" % (time.clock() - time_start))

# ╤яеепР
random.shuffle(ls)
time_start = time.clock()
sort.heap_sort(ls)
print("╤яеепРсцй╠: % s" % (time.clock() - time_start))
Example #25
0
    def test_quicksort(self):
        sort.quick_sort(0, len(self.list), self.list)

        self.assertTrue(self.in_order(self.list))
Example #26
0
 def tests_quick_sort(self):
     """ Test Quick Sort. read sort.py for instructions. """
     sample = [3, 1, 10, 654, 45, 5, 8, 5, 31, 123]
     sorted_sample = [1, 3, 5, 5, 8, 10, 31, 45, 123, 654]
     self.assertEqual(sorted_sample, sort.quick_sort(sample))
Example #27
0
 def test_sort(self):
     array = [6, 2, 5, 8, 1, 3, 7, 9, 4, 0]
     self.assertEqual(quick_sort(array), list(range(10)))
Example #28
0
from sort import seletion_sort, bubble_sort, quick_sort

arr = [2, 42, 84, 5, 113, 4, 6, 33, 65, 756]

sorted = [2, 4, 5, 6, 33, 42, 65, 84, 113, 756]
reversed = [756, 113, 84, 65, 42, 33, 6, 5, 4, 2]

sorted_arr = seletion_sort(arr)

assert (sorted_arr == sorted)

reversed_arr = seletion_sort(arr, True)
assert (reversed_arr == reversed)

sorted_arr = bubble_sort(arr)
assert (sorted_arr == sorted)

reversed_arr = bubble_sort(arr, True)
assert (reversed_arr == reversed)

sorted_arr = quick_sort(arr)
assert (sorted_arr == sorted)

reversed_arr = quick_sort(arr, True)
assert (reversed_arr == reversed)
Example #29
0
        # 用mid进行划分(避免顺序或逆序时最坏复杂度)
        mid = (low + high) // 2
        arr[low], arr[mid] = arr[mid], arr[low]
        pivot_pos = partition(arr, low, high)
        quick_sort(arr, low, pivot_pos - 1)
        quick_sort(arr, pivot_pos + 1, high)


from random import randint
from time import clock

l = []
for i in range(100000):
    l.append(randint(0, 100000))
t = clock()
quick_sort(l, 0, 100000 - 1)  # python
print(clock() - t)
print(l[:100])

l = []
for i in range(100000):
    l.append(randint(0, 100000))
t = clock()
l.sort()  # python-stable
print(clock() - t)
print(l[:100])

from sort import quick_sort

l = []
for i in range(100000):
Example #30
0
import sort
import Student
import read_file
import time

student_list = read_file.read_class_file(input("Enter file nime:\n"))

start_time = time.time()
sort.buble_sort(student_list)
print("Time: ", time.time() - start_time, "\nResult:")
for i in student_list:
    print(i, "\n")

print("------------------------------------------")

start_time = time.time()
sort.quick_sort(0, len(student_list), student_list)
print()
print("QuickSort  \nComparasion times: ", sort.comparasion_times,
      "\nSwap times: ", sort.swap_times, "\nTime: ",
      time.time() - start_time, "\nResult:")
for i in student_list:
    print(i, "\n")
Example #31
0
 def _sort_list(list_):
     return quick_sort(list_)
Example #32
0
 def test_quick_sort(self):
     array = [7, 5, 1, 8, 3, 4, 4, 7, 3, 6, 2, 1, 8, 9, 0, 6]
     assert sort.quick_sort(array) == [0, 1, 1, 2, 3, 3, 4, 4, 5, 6, 6, 7, 7, 8, 8, 9]
Example #33
0
#再帰条件の変更
import sys
sys.setrecursionlimit(100000)

l = list(range(3000))
random.shuffle(l)

start_time = time.time()
sorted_list = sort.bubble_sort(l)
print('time:{0:.3f}'.format(time.time()-start_time))

start_time = time.time()
sorted_list = sort.selection_sort(l)
print('time:{0:.3f}'.format(time.time()-start_time))

start_time = time.time()
sorted_list = sort.insertion_sort(l)
print('time:{0:.3f}'.format(time.time()-start_time))

start_time = time.time()
sorted_list = sort.heap_sort(l)
print('time:{0:.3f}'.format(time.time()-start_time))

start_time = time.time()
sorted_list = sort.merge_sort(l)
#print(sorted_list)
print('time:{0:.3f}'.format(time.time()-start_time))

start_time = time.time()
sorted_list = sort.quick_sort(l)
print('time:{0:.3f}'.format(time.time()-start_time))
Example #34
0
def test_quick_sort():
    arr = [9, 4, 2, 4, 6, 7, 2, 3, 4, 5, 1, 1, 2]
    assert quick_sort(arr, 0, len(arr) - 1) == sorted(arr)
Example #35
0
def slope_one(file_path, n=-1):
    """
    Making recommendation via slope one.
    This function try to return a recommendation like:
    rec={
        user:{
            item:pred
        }
    }
    """

    #load data model
    data_model = RecDataModel(file_path)
    data_model.load_user_model()
    data_model.load_item_model()
    item_list = list(data_model.get_item_list())
    user_list = list(data_model.get_user_list())

    #compute dev(i,j)
    dev = {}
    tmp = {}
    for i in item_list:
        tmp[i] = (0.0, 0)
    for i in item_list:
        dev[i] = tmp
    for i in range(len(item_list)):
        rate_i = data_model.get_item_vec(item_list[i])
        if rate_i and len(rate_i) > 0:
            for j in range(i, len(item_list)):
                if i != j:
                    rate_j = data_model.get_item_vec(item_list[j])
                    if rate_j and len(rate_j) > 0:
                        dev_ij = 0.0
                        dev_count = 0
                        for iu in rate_i:
                            if iu in rate_j:
                                dev_ij += rate_i[iu] - rate_j[iu]
                                dev_count += 1
                        if dev_count > 0:
                            dev_ij /= dev_count
                            dev[item_list[i]][item_list[j]] = (dev_ij,
                                                               dev_count)
                            dev[item_list[j]][item_list[i]] = (dev_ij,
                                                               dev_count)

    #make rec
    rec = {}
    for u in user_list:
        print u
        rate_u = data_model.get_user_vec(u)
        rec_u = {}
        for i in item_list:
            if i not in rate_u:
                pred = 0.0
                count = 0.0
                i_dev = dev.get(i)
                for iu in rate_u:
                    dev_ij, dev_count = i_dev[iu]
                    pred += (rate_u.get(iu) - dev_ij) * dev_count
                    count += dev_count
                if count > 0:
                    rec_u[i] = pred / count
                else:
                    rec_u[i] = 0.0
        if n != -1:
            items, pred = quick_sort(rec_u, r=True)
            rec_u = {}
            for i in range(n):
                rec_u[items[i]] = pred[i]
        rec[u] = rec_u
    return rec