Advertisement
Guest User

Untitled

a guest
Nov 29th, 2015
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 15.94 KB | None | 0 0
  1. # File: sorting..py
  2. # Description: Solution
  3. # Student: Suliman Sharif
  4. # Student's UT EID: ss59598
  5. # Course Name: CS 313E
  6. # Unique Number: 50595
  7. #
  8. # Date Created: 11/25/2015
  9. # Date Last Modified:11/25/2015
  10.  
  11. import random
  12. import time
  13. import sys
  14. sys.setrecursionlimit(10000)
  15.  
  16. def bubbleSort(alist):
  17.     for passnum in range(len(alist)-1,0,-1):
  18.         for i in range(passnum):
  19.             if alist[i] > alist[i+1]:
  20.                 temp = alist[i]
  21.                 alist[i] = alist[i+1]
  22.                 alist[i+1] = temp
  23.  
  24. def selectionSort(alist):
  25.     for fillslot in range(len(alist)-1,0,-1):
  26.         positionOfMax = 0
  27.         for location in range(1,fillslot+1):
  28.             if alist[location] > alist[positionOfMax]:
  29.                 positionOfMax = location
  30.         temp = alist[fillslot]
  31.         alist[fillslot] = alist[positionOfMax]
  32.         alist[positionOfMax] = temp
  33.  
  34.  
  35. def insertionSort(alist):
  36.     for index in range(1,len(alist)):
  37.         currentvalue = alist[index]
  38.         position = index
  39.  
  40.         while position>0 and alist[position-1]>currentvalue:
  41.             alist[position] = alist[position-1]
  42.             position = position-1
  43.  
  44.         alist[position] = currentvalue
  45.  
  46. def shellSort(alist):
  47.     sublistcount = len(alist)//2
  48.     while sublistcount > 0:
  49.         for startposition in range(sublistcount):
  50.             gapInsertionSort(alist,startposition,sublistcount)
  51.         sublistcount = sublistcount // 2
  52.  
  53. def gapInsertionSort(alist,start,gap):
  54.     for i in range(start+gap,len(alist),gap):
  55.         currentvalue = alist[i]
  56.         position = i
  57.  
  58.         while position>=gap and alist[position-gap]>currentvalue:
  59.             alist[position] = alist[position-gap]
  60.             position = position - gap
  61.  
  62.         alist[position] = currentvalue
  63.  
  64. def mergeSort(alist):
  65.     if len(alist) > 1:
  66.         mid = len(alist) // 2
  67.         lefthalf = alist[:mid]
  68.         righthalf = alist[mid:]
  69.  
  70.         mergeSort(lefthalf)
  71.         mergeSort(righthalf)
  72.  
  73.         i = 0
  74.         j = 0
  75.         k = 0
  76.  
  77.         while i<len(lefthalf) and j<len(righthalf):
  78.             if lefthalf[i] < righthalf[j]:
  79.                 alist[k] = lefthalf[i]
  80.                 i += 1
  81.             else:
  82.                 alist[k] = righthalf[j]
  83.                 j += 1
  84.             k += 1
  85.  
  86.         while i < len(lefthalf):
  87.             alist[k] = lefthalf[i]
  88.             i += 1
  89.             k += 1
  90.  
  91.         while j < len(righthalf):
  92.             alist[k] = righthalf[j]
  93.             j += 1
  94.             k += 1
  95.  
  96. def quickSort(alist):
  97.     quickSortHelper(alist,0,len(alist) - 1)
  98.  
  99. def quickSortHelper(alist,first,last):
  100.     if first < last:
  101.         splitpoint = partition(alist,first,last)
  102.         quickSortHelper(alist,first,splitpoint-1)
  103.         quickSortHelper(alist,splitpoint+1,last)
  104.  
  105. def partition(alist,first,last):
  106.     pivotvalue = alist[first]
  107.     leftmark = first + 1
  108.     rightmark = last
  109.     done = False
  110.  
  111.     while not done:
  112.  
  113.         while leftmark <= rightmark and alist[leftmark] <= pivotvalue:
  114.             leftmark += 1
  115.  
  116.         while alist[rightmark] >= pivotvalue and rightmark >= leftmark:
  117.             rightmark -= 1
  118.  
  119.         if rightmark < leftmark:
  120.             done = True
  121.         else:
  122.             temp = alist[leftmark]
  123.             alist[leftmark] = alist[rightmark]
  124.             alist[rightmark] = temp
  125.  
  126.     temp = alist[first]
  127.     alist[first] = alist[rightmark]
  128.     alist[rightmark] = temp
  129.  
  130. def runFunction(function, number, listSize):
  131.  
  132.     average = 0
  133.     for i in range(number):
  134.         average += function(listSize)
  135.  
  136.     average = average / number
  137.    
  138.     return average
  139.  
  140. ############################################
  141.  
  142. def listNumberSort(n):
  143.    
  144.     randomList = []
  145.     for i in range(0, n):
  146.         randomList.append(i)
  147.        
  148.     random.shuffle(randomList)
  149.     bubbleTime = bubbleSortTime(randomList)
  150.  
  151.     return bubbleTime
  152.  
  153. def listSortedSort(n):
  154.    
  155.     sortedList = []
  156.     for i in range(0, n):
  157.         sortedList.append(i)
  158.        
  159.     bubbleTime = bubbleSortTime(sortedList)
  160.  
  161.     return bubbleTime
  162.  
  163. def listReversedSort(n):
  164.    
  165.     reversedList = []
  166.     for i in range(0, n):
  167.         reversedList.append(i)
  168.  
  169.     reversedList.reverse()
  170.     bubbleTime = bubbleSortTime(reversedList)
  171.  
  172.     return bubbleTime
  173.  
  174. def bubbleSortTime(List):
  175.  
  176.     startTime = time.perf_counter()
  177.     bubbleSort(List)
  178.     endTime = time.perf_counter()
  179.     elapsedTime = endTime - startTime
  180.  
  181.     return elapsedTime
  182.  
  183. ###########################################
  184.  
  185. def listNumberSelection(n):
  186.  
  187.     randomList = []
  188.     for i in range(0, n):
  189.         randomList.append(i)
  190.        
  191.     random.shuffle(randomList)
  192.     selectionTime = selectionSortTime(randomList)
  193.  
  194.     return selectionTime
  195.    
  196. def listSortedSelection(n):
  197.    
  198.     sortedList = []
  199.     for i in range(0, n):
  200.         sortedList.append(i)
  201.        
  202.     selectionTime = selectionSortTime(sortedList)
  203.  
  204.     return selectionTime
  205.  
  206. def listReversedSelection(n):
  207.    
  208.     reversedList = []
  209.     for i in range(0, n):
  210.         reversedList.append(i)
  211.  
  212.     reversedList.reverse()
  213.     selectionTime = selectionSortTime(reversedList)
  214.  
  215.     return selectionTime
  216.  
  217. def selectionSortTime(List):
  218.  
  219.     startTime = time.perf_counter()
  220.     selectionSort(List)
  221.     endTime = time.perf_counter()
  222.     elapsedTime = endTime - startTime
  223.  
  224.     return elapsedTime
  225.  
  226. ##########################################
  227.  
  228. def listNumberInsertion(n):
  229.  
  230.     randomList = []
  231.     for i in range(0, n):
  232.         randomList.append(i)
  233.        
  234.     random.shuffle(randomList)
  235.     insertionTime = insertionSortTime(randomList)
  236.  
  237.     return insertionTime
  238.  
  239.  
  240. def listSortedInsertion(n):
  241.    
  242.     sortedList = []
  243.     for i in range(0, n):
  244.         sortedList.append(i)
  245.        
  246.     insertionTime = insertionSortTime(sortedList)
  247.  
  248.     return insertionTime
  249.  
  250. def listReversedInsertion(n):
  251.    
  252.     reversedList = []
  253.     for i in range(0, n):
  254.         reversedList.append(i)
  255.  
  256.     reversedList.reverse()
  257.     insertionTime = insertionSortTime(reversedList)
  258.  
  259.     return insertionTime    
  260.  
  261. def insertionSortTime(List):
  262.  
  263.     startTime = time.perf_counter()
  264.     insertionSort(List)
  265.     endTime = time.perf_counter()
  266.     elapsedTime = endTime - startTime
  267.  
  268.     return elapsedTime
  269.  
  270. ############################################
  271.  
  272. def listNumberShell(n):
  273.  
  274.     randomList = []
  275.     for i in range(0, n):
  276.         randomList.append(i)
  277.        
  278.     random.shuffle(randomList)
  279.     shellTime = shellSortTime(randomList)
  280.  
  281.     return shellTime
  282.    
  283.  
  284. def listSortedShell(n):
  285.    
  286.     sortedList = []
  287.     for i in range(0, n):
  288.         sortedList.append(i)
  289.        
  290.     shellTime = shellSortTime(sortedList)
  291.  
  292.     return shellTime
  293.  
  294. def listReversedShell(n):
  295.    
  296.     reversedList = []
  297.     for i in range(0, n):
  298.         reversedList.append(i)
  299.  
  300.     reversedList.reverse()
  301.     shellTime = shellSortTime(reversedList)
  302.  
  303.     return shellTime
  304.  
  305. def shellSortTime(List):
  306.  
  307.     startTime = time.perf_counter()
  308.     shellSort(List)
  309.     endTime = time.perf_counter()
  310.     elapsedTime = endTime - startTime
  311.  
  312.     return elapsedTime
  313.  
  314. ############################################
  315.  
  316. def listNumberMerge(n):
  317.  
  318.     randomList = []
  319.     for i in range(0, n):
  320.         randomList.append(i)
  321.        
  322.     random.shuffle(randomList)
  323.     mergeTime = mergeSortTime(randomList)
  324.  
  325.     return mergeTime
  326.  
  327.  
  328. def listSortedMerge(n):
  329.    
  330.     sortedList = []
  331.     for i in range(0, n):
  332.         sortedList.append(i)
  333.        
  334.     mergeTime = mergeSortTime(sortedList)
  335.  
  336.     return mergeTime
  337.  
  338. def listReversedMerge(n):
  339.    
  340.     reversedList = []
  341.     for i in range(0, n):
  342.         reversedList.append(i)
  343.  
  344.     reversedList.reverse()
  345.     mergeTime = mergeSortTime(reversedList)
  346.  
  347.     return mergeTime        
  348.  
  349. def mergeSortTime(List):
  350.  
  351.     startTime = time.perf_counter()
  352.     mergeSort(List)
  353.     endTime = time.perf_counter()
  354.     elapsedTime = endTime - startTime
  355.  
  356.     return elapsedTime
  357.  
  358. ###############################################
  359.  
  360. def listNumberQuick(n):
  361.  
  362.     randomList = []
  363.     for i in range(0, n):
  364.         randomList.append(i)
  365.        
  366.     random.shuffle(randomList)
  367.     quickTime = quickSortTime(randomList)
  368.  
  369.     return quickTime
  370.    
  371. def listSortedQuick(n):
  372.    
  373.     sortedList = []
  374.     for i in range(0, n):
  375.         sortedList.append(i)
  376.        
  377.     quickTime = quickSortTime(sortedList)
  378.  
  379.     return quickTime
  380.  
  381. def listReversedQuick(n):
  382.    
  383.     reversedList = []
  384.     for i in range(0, n):
  385.         reversedList.append(i)
  386.  
  387.     reversedList.reverse()
  388.     quickTime = quickSortTime(reversedList)
  389.  
  390.     return quickTime
  391.  
  392. def quickSortTime(List):
  393.  
  394.     startTime = time.perf_counter()
  395.     quickSort(List)
  396.     endTime = time.perf_counter()
  397.     elapsedTime = endTime - startTime
  398.  
  399.     return elapsedTime
  400.  
  401. ################################################
  402.  
  403. def main():
  404.  
  405.     randomAverageBubble = runFunction(listNumberSort, 5, 10)
  406.     randomAverageBubble100 = runFunction(listNumberSort, 5, 100)
  407.     randomAverageBubble1000 = runFunction(listNumberSort, 5, 1000)
  408.     randomAverageSelection = runFunction(listNumberSelection, 5, 10)
  409.     randomAverageSelection100 = runFunction(listNumberSelection, 5, 100)
  410.     randomAverageSelection1000 = runFunction(listNumberSelection, 5, 1000)
  411.     randomAverageInsertion = runFunction(listNumberInsertion, 5, 10)
  412.     randomAverageInsertion100 = runFunction(listNumberInsertion, 5, 100)
  413.     randomAverageInsertion1000 = runFunction(listNumberInsertion, 5, 1000)
  414.     randomAverageShell = runFunction(listNumberShell, 5, 10)
  415.     randomAverageShell100 = runFunction(listNumberShell, 5, 100)
  416.     randomAverageShell1000 = runFunction(listNumberShell, 5, 1000)
  417.     randomAverageMerge = runFunction(listNumberMerge, 5, 10)
  418.     randomAverageMerge100 = runFunction(listNumberMerge, 5, 100)
  419.     randomAverageMerge1000 = runFunction(listNumberMerge, 5, 1000)
  420. #    randomAverageQuick = runFunction(listNumberQuick, 5, 10)
  421. #    randomAverageQuick100 = runFunction(listNumberQuick, 5, 100)
  422. #    randomAverageQuick1000 = runFunction(listNumberQuick, 5, 1000)
  423.  
  424.     print ("Input type = Random")
  425.     print ("                      avg time    avg time    avg time")
  426.     print ("    Sorting function   (n=10)      (n=100)    (n=1000)")
  427.     print ("----------------------------------------------------------")
  428.     print ("       bubbleSort     {0:0.6f}    {1:0.6f}    {2:0.6f}".format(randomAverageBubble, randomAverageBubble100, randomAverageBubble1000))
  429.     print ("      SelectionSort   {0:0.6f}    {1:0.6f}    {2:0.6f}".format(randomAverageSelection, randomAverageSelection100, randomAverageSelection1000))
  430.     print ("      InsertionSort   {0:0.6f}    {1:0.6f}    {2:0.6f}".format(randomAverageInsertion, randomAverageInsertion100, randomAverageInsertion1000))
  431.     print ("        ShellSort     {0:0.6f}    {1:0.6f}    {2:0.6f}".format(randomAverageShell, randomAverageShell100, randomAverageShell1000))
  432.     print ("        MergeSort     {0:0.6f}    {1:0.6f}    {2:0.6f}".format(randomAverageMerge, randomAverageMerge100, randomAverageMerge1000))
  433. #    print ("        QuickSort     {0:0.6f}    {1:0.6f}    {2:0.6f}".format(randomAverageQuick, randomAverageQuick100, randomAverageQuick1000))
  434.  
  435.     print ("\n")
  436.     sortedAverageBubble = runFunction(listSortedSort, 5, 10)
  437.     sortedAverageBubble100 = runFunction(listSortedSort, 5, 100)
  438.     sortedAverageBubble1000 = runFunction(listSortedSort, 5, 1000)
  439.     sortedAverageSelection = runFunction(listSortedSelection, 5, 10)
  440.     sortedAverageSelection100 = runFunction(listSortedSelection, 5, 100)
  441.     sortedAverageSelection1000 = runFunction(listSortedSelection, 5, 1000)
  442.     sortedAverageInsertion = runFunction(listSortedInsertion, 5, 10)
  443.     sortedAverageInsertion100 = runFunction(listSortedInsertion, 5, 100)
  444.     sortedAverageInsertion1000 = runFunction(listSortedInsertion, 5, 1000)
  445.     sortedAverageShell = runFunction(listSortedShell, 5, 10)
  446.     sortedAverageShell100 = runFunction(listSortedShell, 5, 100)
  447.     sortedAverageShell1000 = runFunction(listSortedShell, 5, 1000)
  448.     sortedAverageMerge = runFunction(listSortedMerge, 5, 10)
  449.     sortedAverageMerge100 = runFunction(listSortedMerge, 5, 100)
  450.     sortedAverageMerge1000 = runFunction(listSortedMerge, 5, 1000)
  451. #    sortedAverageQuick = runFunction(listSortedQuick, 5, 10)
  452. #    sortedAverageQuick100 = runFunction(listSortedQuick, 5, 100)
  453. #    sortedAverageQuick1000 = runFunction(listSortedQuick, 5, 1000)
  454.  
  455.     print ("Input type = Sorted")
  456.     print ("                      avg time    avg time    avg time")
  457.     print ("    Sorting function   (n=10)      (n=100)    (n=1000)")
  458.     print ("----------------------------------------------------------")
  459.     print ("       bubbleSort     {0:0.6f}    {1:0.6f}    {2:0.6f}".format(sortedAverageBubble, sortedAverageBubble100, sortedAverageBubble1000))
  460.     print ("      SelectionSort   {0:0.6f}    {1:0.6f}    {2:0.6f}".format(sortedAverageSelection, sortedAverageSelection100, sortedAverageSelection1000))
  461.     print ("      InsertionSort   {0:0.6f}    {1:0.6f}    {2:0.6f}".format(sortedAverageInsertion, sortedAverageInsertion100, sortedAverageInsertion1000))
  462.     print ("        ShellSort     {0:0.6f}    {1:0.6f}    {2:0.6f}".format(sortedAverageShell, sortedAverageShell100, sortedAverageShell1000))
  463.     print ("        MergeSort     {0:0.6f}    {1:0.6f}    {2:0.6f}".format(sortedAverageMerge, sortedAverageMerge100, sortedAverageMerge1000))
  464. #    print ("        QuickSort     {0:0.6f}    {1:0.6f}    {2:0.6f}".format(sortedAverageQuick, sortedAverageQuick100, sortedAverageQuick1000))
  465.  
  466.     print ("\n")
  467.     reversedAverageBubble = runFunction(listReversedSort, 5, 10)
  468.     reversedAverageBubble100 = runFunction(listReversedSort, 5, 100)
  469.     reversedAverageBubble1000 = runFunction(listReversedSort, 5, 1000)
  470.     reversedAverageSelection = runFunction(listReversedSelection, 5, 10)
  471.     reversedAverageSelection100 = runFunction(listReversedSelection, 5, 100)
  472.     reversedAverageSelection1000 = runFunction(listReversedSelection, 5, 1000)
  473.     reversedAverageInsertion = runFunction(listReversedInsertion, 5, 10)
  474.     reversedAverageInsertion100 = runFunction(listReversedInsertion, 5, 100)
  475.     reversedAverageInsertion1000 = runFunction(listReversedInsertion, 5, 1000)
  476.     reversedAverageShell = runFunction(listReversedShell, 5, 10)
  477.     reversedAverageShell100 = runFunction(listReversedShell, 5, 100)
  478.     reversedAverageShell1000 = runFunction(listReversedShell, 5, 1000)
  479.     reversedAverageMerge = runFunction(listReversedMerge, 5, 10)
  480.     reversedAverageMerge100 = runFunction(listReversedMerge, 5, 100)
  481.     reversedAverageMerge1000 = runFunction(listReversedMerge, 5, 1000)
  482. #    reversedAverageQuick = runFunction(listReversedQuick, 5, 10)
  483. #    reversedAverageQuick100 = runFunction(listReversedQuick, 5, 100)
  484. #    reversedAverageQuick1000 = runFunction(listReversedQuick, 5, 1000)
  485.  
  486.     print ("Input type = Reversed")
  487.     print ("                      avg time    avg time    avg time")
  488.     print ("    Sorting function   (n=10)      (n=100)    (n=1000)")
  489.     print ("----------------------------------------------------------")
  490.     print ("       bubbleSort     {0:0.6f}    {1:0.6f}    {2:0.6f}".format(reversedAverageBubble, reversedAverageBubble100, reversedAverageBubble1000))
  491.     print ("      SelectionSort   {0:0.6f}    {1:0.6f}    {2:0.6f}".format(reversedAverageSelection, reversedAverageSelection100, reversedAverageSelection1000))
  492.     print ("      InsertionSort   {0:0.6f}    {1:0.6f}    {2:0.6f}".format(reversedAverageInsertion, reversedAverageInsertion100, reversedAverageInsertion1000))
  493.     print ("        ShellSort     {0:0.6f}    {1:0.6f}    {2:0.6f}".format(reversedAverageShell, reversedAverageShell100, reversedAverageShell1000))
  494.     print ("        MergeSort     {0:0.6f}    {1:0.6f}    {2:0.6f}".format(reversedAverageMerge, reversedAverageMerge100, reversedAverageMerge1000))
  495. #    print ("        QuickSort     {0:0.6f}    {1:0.6f}    {2:0.6f}".format(reversedAverageQuick, reversedAverageQuick100, reversedAverageQuick1000))
  496.  
  497.  
  498.  
  499. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement