Skip to content

Instantly share code, notes, and snippets.

@nobleknightt
Created July 1, 2021 10:54
Show Gist options
  • Select an option

  • Save nobleknightt/624f48282409f98d803ec8a9ae274b24 to your computer and use it in GitHub Desktop.

Select an option

Save nobleknightt/624f48282409f98d803ec8a9ae274b24 to your computer and use it in GitHub Desktop.
complexity-analysis.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "complexity-analysis.ipynb",
"provenance": [],
"authorship_tag": "ABX9TyNaQ5NhsyjinCbKZgTMbHqk",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/er-knight/624f48282409f98d803ec8a9ae274b24/complexity-analysis.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "code",
"metadata": {
"id": "EN8h0AP2io6M"
},
"source": [
"import matplotlib.pyplot as plt\n",
"from time import time\n",
"from random import sample"
],
"execution_count": 1,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "K0cf0ff0i9FK"
},
"source": [
"def bubble_sort(a):\n",
" for i in range(len(a)):\n",
" swapped = False\n",
" for j in range(len(a)-i-1):\n",
" if a[j] > a[j+1]:\n",
" a[j], a[j+1] = a[j+1], a[j]\n",
" swapped = True\n",
" if not swapped:\n",
" break"
],
"execution_count": 2,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "3a6T4sVNi_FH"
},
"source": [
"def selection_sort(a):\n",
" for i in range(len(a)):\n",
" m = i\n",
" for j in range(i+1, len(a)):\n",
" if a[j] < a[m]:\n",
" m = j\n",
" a[i], a[m] = a[m], a[i]"
],
"execution_count": 3,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "GNE6U9bwjDBN"
},
"source": [
"def insertion_sort(a):\n",
" for i in range(1, len(a)):\n",
" key = a[i]\n",
" j = i - 1\n",
" while key < a[j] and j >= 0:\n",
" a[j + 1] = a[j]\n",
" j -= 1\n",
" a[j + 1] = key"
],
"execution_count": 4,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "FlogHI2FjH9O"
},
"source": [
"bubble_sort_time = []\n",
"\n",
"for k in range(10, 100, 10):\n",
" total_time = 0\n",
" for i in range(1000):\n",
" a = sorted(sample(range(10, 100), k), reverse=True)\n",
" start = time(); bubble_sort(a); end = time()\n",
" total_time += (end - start) * 1000\n",
" bubble_sort_time.append(round(total_time / 1000, 5))"
],
"execution_count": 5,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "oCKKm-KTkp8t"
},
"source": [
"selection_sort_time = []\n",
"\n",
"for k in range(10, 100, 10):\n",
" total_time = 0\n",
" for i in range(1000):\n",
" a = sorted(sample(range(10, 100), k), reverse=True)\n",
" start = time(); selection_sort(a); end = time()\n",
" total_time += (end - start) * 1000\n",
" selection_sort_time.append(round(total_time / 1000, 5))"
],
"execution_count": 6,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "H-24KRttkuuV"
},
"source": [
"insertion_sort_time = []\n",
"\n",
"for k in range(10, 100, 10):\n",
" total_time = 0\n",
" for i in range(1000):\n",
" a = sorted(sample(range(10, 100), k), reverse=True)\n",
" start = time(); insertion_sort(a); end = time()\n",
" total_time += (end - start) * 1000\n",
" insertion_sort_time.append(round(total_time / 1000, 5))"
],
"execution_count": 7,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 282
},
"id": "qfPaMAgml1_5",
"outputId": "dc279e83-da7f-43bf-e357-542097e4a696"
},
"source": [
"plt.plot(range(10, 100, 10), bubble_sort_time)\n",
"plt.plot(range(10, 100, 10), selection_sort_time)\n",
"plt.plot(range(10, 100, 10), insertion_sort_time)\n",
"plt.xlabel(\"number of items\")\n",
"plt.ylabel(\"time taken (ms)\")\n",
"plt.legend([\"bubble sort\", \"selection sort\", \"insertion sort\"]);"
],
"execution_count": 8,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEJCAYAAACZjSCSAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdd1yVZf/A8c/FnqIMByAKIjgRFffKleY2LUszLcvM5lOa9jRsPU82fm21vcxKM1dl9ZRl5RZQHIB7ASICyl6Hc/3+uBHRVNA4HMb3/Xr5Qs593+d8Ibu+932N76W01gghhKi7bKwdgBBCCOuSRCCEEHWcJAIhhKjjJBEIIUQdJ4lACCHqOEkEQghRx1ksESilPlZKpSil9lzm+CSl1C6l1G6l1CalVAdLxSKEEOLyLPlE8Ckw9ArHjwD9tNbtgeeB9y0YixBCiMuws9Qba63/VEo1v8LxTWW+3QL4V+R9vb29dfPml31bIYQQlxAVFZWqtfa51DGLJYKrNA348XIHlVLTgekAAQEBREZGVlVcQghRKyiljl3umNUHi5VS/TESwZzLnaO1fl9rHaG1jvDxuWRCE0IIcY2s+kSglAoDPgRu0FqnWTMWIYSoq6z2RKCUCgBWAJO11vutFYcQQtR1FnsiUEp9BVwHeCulEoB5gD2A1vpd4GnAC1iolAIwaa0jruWzioqKSEhIID8/vzJCF5XIyckJf39/7O3trR2KEOIyLDlr6NZyjt8F3FUZn5WQkIC7uzvNmzenJKmIakBrTVpaGgkJCQQGBlo7HCHEZVh9sLgy5Ofn4+XlJUmgmlFK4eXlJU9qQlRztSIRAJIEqin57yJE9VdrEoEQQtRmb/56gL1JGRZ5b0kEleDo0aO0a9fuqq555plnePXVV//2+vr16xkxYsQlr2nevDmpqanXFOPVWr9+PZs2bSr/RCGExX259Tiv/7qftbtPWuT9JRGIvzGZTJIIhKgmIo+mM2/NHvqF+PDI4FCLfIYkgkpiMpmYNGkSrVu3Zvz48eTm5gIX3sVHRkZy3XXXlV4TExNDjx49aNmyJR988EHp65mZmQwfPpzQ0FBmzJiB2Wz+2+d98cUXdO3alfDwcO655x6Ki4v/ds7cuXNp06YNYWFhzJo1CzCeXgYMGEBYWBgDBw7k+PHjAEydOpUZM2bQrVs3br75Zt59911ef/11wsPD+euvvyrt9ySEqLiks3nM+CIa/wYuvHVLR2xtLDPmVl1qDVWaZ7/bS2xSZqW+Zxvfeswb2faK5+zbt4+PPvqIXr16ceedd7Jw4cLSxvdydu3axZYtW8jJyaFjx44MHz4cgG3bthEbG0uzZs0YOnQoK1asYPz48aXXxcXFsXTpUjZu3Ii9vT0zZ85kyZIl3H777aXnpKWlsXLlSuLj41FKcfbsWQAeeOABpkyZwpQpU/j444958MEHWbVqFWBMw920aRO2trY888wzuLm5lfszCCEsI7+omHsWR5FfVMzX07vh4WK5tTjyRFBJmjZtSq9evQC47bbb2LBhQ7nXjB49GmdnZ7y9venfvz/btm0DoGvXrgQFBWFra8utt976t/dat24dUVFRdOnShfDwcNatW8fhw4cvOMfDwwMnJyemTZvGihUrcHFxAWDz5s1MnDgRgMmTJ1/w3jfddBO2trbX/ksQQlQKrTVzv93FnqQM3pgQTnBDd4t+Xq17Iijvzt1SLp4mee57Ozu70q6di+fTX+6ay71+jtaaKVOm8OKLL142Hjs7O7Zt28a6detYvnw577zzDr/99tsVfwZXV9crHhdCVI0P/zrCqp1JPDo4hEFtGln88+SJoJIcP36czZs3A/Dll1/Su3dvwBgjiIqKAuDbb7+94JrVq1eTn59PWloa69evp0uXLoDRNXTkyBHMZjNLly4tfa9zBg4cyPLly0lJSQEgPT2dY8curDCbnZ1NRkYGw4YN4/XXXycmJgaAnj178vXXXwOwZMkS+vTpc8mfx93dnaysrGv+fQghrs0f+0/z4o9xDGvfmPsHBFfJZ0oiqCShoaEsWLCA1q1bc+bMGe69914A5s2bx0MPPURERMTful3CwsLo378/3bt356mnnsLX1xeALl26cP/999O6dWsCAwMZO3bsBde1adOGF154geuvv56wsDAGDx7MyZMXTivLyspixIgRhIWF0bt3b1577TUA3n77bT755BPCwsJYvHgxb7755iV/npEjR7Jy5UoZLBaiCh1NzeGBL6MJaeTOK+M7VNmCTKW1rpIPqiwRERH64o1p4uLiaN26tZUiEuWR/z5ClC8rv4ixCzeRll3Amvt709TTpVLfXykVdbnCnrVujEAIIWoas1nzr6UxHEnNYfGdXSs9CZRHuoaE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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "-ab041T2qIiW"
},
"source": [
"def bubble_sort(a):\n",
" comparisons = 0\n",
" for i in range(len(a)):\n",
" swapped = False\n",
" for j in range(len(a)-i-1):\n",
" if a[j] > a[j+1]:\n",
" a[j], a[j+1] = a[j+1], a[j]\n",
" swapped = True\n",
" comparisons += 1\n",
" if not swapped:\n",
" break\n",
"\n",
" return comparisons"
],
"execution_count": 9,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "BNVY1UJaqVZE"
},
"source": [
"def selection_sort(a):\n",
" comparisons = 0\n",
" for i in range(len(a)):\n",
" m = i\n",
" for j in range(i+1, len(a)):\n",
" if a[j] < a[m]:\n",
" m = j\n",
" comparisons += 1\n",
" a[i], a[m] = a[m], a[i]\n",
"\n",
" return comparisons"
],
"execution_count": 10,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "3DXQFYT_p7gW"
},
"source": [
"def insertion_sort(a):\n",
" comparisons = 0\n",
" for i in range(1, len(a)):\n",
" key = a[i]\n",
" j = i - 1\n",
" while key < a[j] and j >= 0:\n",
" a[j + 1] = a[j]\n",
" j -= 1\n",
" comparisons += 1\n",
" a[j + 1] = key\n",
"\n",
" return comparisons"
],
"execution_count": 11,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "U_-yZp30q7ne"
},
"source": [
"bubble_sort_comparison = []\n",
"\n",
"for k in range(10, 100, 10):\n",
" total_comparison = 0\n",
" for i in range(1000):\n",
" a = sorted(sample(range(10, 100), k), reverse=True)\n",
" total_comparison += bubble_sort(a)\n",
" bubble_sort_comparison.append(round(total_comparison / 1000))"
],
"execution_count": 12,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "8PMHX7-Lq8qw"
},
"source": [
"selection_sort_comparison = []\n",
"\n",
"for k in range(10, 100, 10):\n",
" total_comparison = 0\n",
" for i in range(1000):\n",
" a = sorted(sample(range(10, 100), k), reverse=True)\n",
" total_comparison += selection_sort(a)\n",
" selection_sort_comparison.append(round(total_comparison / 1000))"
],
"execution_count": 13,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "NhyuCDzkqc9X"
},
"source": [
"insertion_sort_comparison = []\n",
"\n",
"for k in range(10, 100, 10):\n",
" total_comparison = 0\n",
" for i in range(1000):\n",
" a = sorted(sample(range(10, 100), k), reverse=True)\n",
" total_comparison += insertion_sort(a)\n",
" insertion_sort_comparison.append(round(total_comparison / 1000))"
],
"execution_count": 14,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 279
},
"id": "nYgnQO8urWFd",
"outputId": "aabe8313-435c-4ea3-e154-398e048752f9"
},
"source": [
"plt.plot(range(10, 100, 10), bubble_sort_comparison)\n",
"plt.plot(range(10, 100, 10), selection_sort_comparison)\n",
"plt.plot(range(10, 100, 10), insertion_sort_comparison)\n",
"plt.xlabel(\"number of items\")\n",
"plt.ylabel(\"number of comparisons\")\n",
"plt.legend([\"bubble sort\", \"selection sort\", \"insertion sort\"]);"
],
"execution_count": 15,
"outputs": [
{
"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"
}
}
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment