Last active
February 3, 2021 08:28
-
-
Save dwivedys/bc672bc3ea8cfd4c718aa84f5e59fc80 to your computer and use it in GitHub Desktop.
SortingAlgo.ipynb
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"nbformat": 4, | |
"nbformat_minor": 0, | |
"metadata": { | |
"colab": { | |
"name": "Untitled14.ipynb", | |
"provenance": [], | |
"collapsed_sections": [], | |
"authorship_tag": "ABX9TyOMekQmjXi6Tae0u9Ob6i0C", | |
"include_colab_link": true | |
}, | |
"kernelspec": { | |
"name": "python3", | |
"display_name": "Python 3" | |
} | |
}, | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "view-in-github", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"<a href=\"https://colab.research.google.com/gist/dwivedys/bc672bc3ea8cfd4c718aa84f5e59fc80/untitled14.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 788 | |
}, | |
"id": "ovw9k2aTkneT", | |
"outputId": "430e0356-d699-4970-960f-3b90c6aea3d5" | |
}, | |
"source": [ | |
"import random\n", | |
"import time\n", | |
"import matplotlib.pyplot as plt\n", | |
"%matplotlib inline\n", | |
"\n", | |
"# List sizes of the lists to be sorted\n", | |
"nums = [100, 1000, 10000, 20000, 30000]\n", | |
"\n", | |
"# Declare a dictionary data structure to hold the list size the times it took to sort the list in ascending order\n", | |
"perf_dict = {}\n", | |
"\n", | |
"# This block of code runs for each differently sized list, sorts the list, records the run time of the sort and then publishes the output in a tabular format\n", | |
"\n", | |
"\n", | |
"# The program should run once for each list hence we use a while loop to control the number of runs\n", | |
"z = 0\n", | |
"while(z < len(nums)): \n", | |
" my_list = []\n", | |
"\n", | |
"# Create the list with desired number of elements (uses random numbers to generate the list) \n", | |
" print(f'\\nPass: {z+1} - Sorting a list of {nums[z]} elements') \n", | |
" for x in range(nums[z]):\n", | |
" my_list.append(random.randint(0,x))\n", | |
"\n", | |
" print(f'First 20 elements of the list to be sorted is: {my_list[0:20]}')\n", | |
"\n", | |
" # The Sorting Process begins\n", | |
" start = time.perf_counter()\n", | |
" l = len(my_list)\n", | |
" if l == 0: \n", | |
" print(f'The list is empty')\n", | |
" else: \n", | |
" for i in range(0, l):\n", | |
" for j in range(i+1, l):\n", | |
" if my_list[j] >= my_list[i]:\n", | |
" continue\n", | |
" else:\n", | |
" swap_var = my_list[i]\n", | |
" my_list[i] = my_list[j]\n", | |
" my_list[j] = swap_var\n", | |
" print(f'First 20 elements of the sorted List = {my_list[0:20]}')\n", | |
" end = time.perf_counter()\n", | |
" #print(f'For a list of {l} elements, it took {end - start} seconds to sort')\n", | |
" perf_dict[len(my_list)] = end-start \n", | |
" z = z + 1\n", | |
"\n", | |
"# Print the output results \n", | |
"print(f'List_Size\\t\\tTime (in seconds)')\n", | |
"for m in perf_dict:\n", | |
" print(f'{m}\\t\\t{perf_dict[m]}')\n", | |
"\n", | |
"x = []\n", | |
"y = []\n", | |
"for key in perf_dict:\n", | |
" x.append(key)\n", | |
" y.append(perf_dict[key])\n", | |
"\n", | |
"plt.title(\"How run time scales with array size\")\n", | |
"plt.xlabel(\"Array Size\")\n", | |
"plt.ylabel(\"Time (seconds)\")\n", | |
"plt.plot(x, y, 'r')\n" | |
], | |
"execution_count": 1, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": [ | |
"\n", | |
"Pass: 1 - Sorting a list of 100 elements\n", | |
"First 20 elements of the list to be sorted is: [0, 1, 1, 3, 3, 1, 6, 1, 7, 7, 8, 3, 3, 9, 10, 9, 13, 6, 9, 14]\n", | |
"First 20 elements of the sorted List = [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 4, 5, 6, 6]\n", | |
"\n", | |
"Pass: 2 - Sorting a list of 1000 elements\n", | |
"First 20 elements of the list to be sorted is: [0, 0, 2, 2, 0, 2, 6, 5, 8, 2, 3, 6, 3, 7, 5, 2, 5, 0, 6, 13]\n", | |
"First 20 elements of the sorted List = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2]\n", | |
"\n", | |
"Pass: 3 - Sorting a list of 10000 elements\n", | |
"First 20 elements of the list to be sorted is: [0, 0, 0, 0, 2, 5, 6, 6, 7, 2, 3, 1, 11, 11, 1, 3, 7, 6, 13, 17]\n", | |
"First 20 elements of the sorted List = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1]\n", | |
"\n", | |
"Pass: 4 - Sorting a list of 20000 elements\n", | |
"First 20 elements of the list to be sorted is: [0, 0, 1, 0, 2, 5, 6, 0, 3, 1, 4, 4, 10, 9, 3, 6, 0, 13, 18, 8]\n", | |
"First 20 elements of the sorted List = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2]\n", | |
"\n", | |
"Pass: 5 - Sorting a list of 30000 elements\n", | |
"First 20 elements of the list to be sorted is: [0, 0, 0, 3, 3, 5, 5, 5, 7, 0, 0, 4, 7, 1, 1, 12, 15, 1, 14, 13]\n", | |
"First 20 elements of the sorted List = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n", | |
"List_Size\t\tTime (in seconds)\n", | |
"100\t\t0.0010035090000002356\n", | |
"1000\t\t0.08799615299999175\n", | |
"10000\t\t9.078086452999997\n", | |
"20000\t\t34.78715884500001\n", | |
"30000\t\t81.046025389\n", | |
"[100, 1000, 10000, 20000, 30000]\n", | |
"[0.0010035090000002356, 0.08799615299999175, 9.078086452999997, 34.78715884500001, 81.046025389]\n" | |
], | |
"name": "stdout" | |
}, | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"[<matplotlib.lines.Line2D at 0x7f0ec34777b8>]" | |
] | |
}, | |
"metadata": { | |
"tags": [] | |
}, | |
"execution_count": 1 | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 432x288 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"tags": [], | |
"needs_background": "light" | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"metadata": { | |
"id": "JIfEwYDolsMd" | |
}, | |
"source": [ | |
"" | |
], | |
"execution_count": null, | |
"outputs": [] | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment