数据结构之堆

<p>Heap介绍(以最大堆为例)</p><p> Heap作为一种数据结构,其被视为一颗完全二叉树,树的每一层都是填满的,最后曾可能未填满(从左至右开始填充)。如下图所示。</p><p> </p><p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPIAAACWCAYAAADkDdXoAAAfpklEQVR4Ae1dC1gV1dp+uagQCt5QAS05paIg3pLMMPOGFyo9WqaSonT0/9VTJz3/75O3rDjksZOezlHLS2lesjrmX+IFNUSNVERNFBURvKEEgqWGmgKy/+cbm91ms+eyZ8/MHvZe63n2MzNrrfnWu95vvr1m1uVbHiaTyQQWGAOMgVrNgGetRs/AMwYYAxwDzJDZg8AYcAEGmCG7gBJZFRgDzJDZM8AYcAEGmCG7gBJZFRgDzJDZM8AYcAEGmCG7gBJZFRgDzJDd9BnIy8vD7Jkz3bT2rldtZsiup1NZNQoKCkLmoUOy8rJMxmeAGbLxdaQJwvr168PLy1sT2Uyo/gwwQ9afc1YiY0B1Bpghq04pE8gY0J8BZsj6c85KZAyozgAzZNUprR0CTxw/jsDAQJw6dap2AGYoRRnwYMsYRflhiYyBWsEAa5FrhZoYSMaAOANs/EGcH5dK/eWXX3A4MxPZ2dmoqKjAvbt34edXH/4B/oiKikJ4RAQ8Pdl/e21UOnu1ro1asxPzyexsJG9Ohncdb0R0jETr0FDUq1fPLOX6zz8jJ+c0zuefQ3BIMMbExcHPz8+czk6MzwAzZOPrSDHCe/fuYemSJfDx9UX/ATHw8vKSlHW1uBjbtiRjcGwsoqOjJfOzDMZggBmyMfSgOoqbN28iKTERQ4ePQIsWLeyWvyctDd5enhg/YYLd97Ib9GeAGbL+nGte4q1bt/DmnDlImDgJvr6+isvLOnYMd+7cxtixYxXLYDfqwwDr2dCHZ11LWbRwIeLGxTtkxAS4c5cuqCgvB7XOLBibAWbIxtaP3ejSdu9GWFh7NGzY0O57bd3Qu09fpKWl4e7du7aSWZxBGGCGbBBFqAUjNTUV3bp3V0scJydm0CB8vmGDqjKZMHUZYIasLp9OlXb0yBF0jOwkiqG0pMRmOrW4x7OyUFhYWCM9ODgEhVdqxtfIyCKcxgAzZKdRr37B6enp6Nqtm03Bv9y8iQ3r1mGODa8g36enY9nSpWjZsiVCQkJs3t8iKAj5+fk201ik8xlghux8HaiGoLKyEt7etifr+QcEIKpHD5iqqqqVRz3Tn61diymvvoomTZtWS7O8aN+hA44cPmwZxc4NxAAzZAMpw1EoVVXi23h5eHhUK6KqqgoLkpLQr39/HNy/H+fPnauWbnnRrHlzFBQUWEaxcwMxwAzZQMpwFEp1M5WWRoZZVlaGlq1aoWGjRnj7zTeRumuXzRtpDrbltE6bmVik0xhghuw06p1f8NWiIs6Ie/TsiU6dO2PUmDHYumWLIDBaZMGCMRlghmxMvShC5eFpX5sc3LIlrpWWmssKDgnB/cpK87XlCS2saBoYaBnFzg3EADNkAynDUSj0zSu23fX9+/erFdGqVStQJ1be2bNc/MULF9Crd+9qefiL3NxcbqYXf82OxmKAGbKx9OEQmsjISOSeOWNTBq1FPnb0KBo3aYLs48fNeWbOncv1RvPfxiNefNGcZnlScOkiOnUSH6O2zM/O9WWALZrQl29NSysvL0fiO4kYn5Cgajm0CGPP7lS8Pm2aqnKZMPUYYC2yelw6XVLdunURFtYOly5eVBVLyratiIuLU1UmE6YuA8yQ1eXTqdLu3LmDs7m5+HjFcs6Vjxpgzp7NxcEDB5CZmamGOCZDIwaYIWtErN5iD2Vk4E8JCeg/YAASk5KwYd1a0Y4vOfhKSkqQefAgvvjPf0CdXa+9+ip+unZNzq0sj84MsG9knQlXuzhqhf+xYAHo+/iNWbPQoEEDroisrCxs/vobjIqLE5y2KYal8MoVbnLInDfngl7ZKZAP7PlJSRg9Zgxin31W7HaWpjMDzJB1JlzN4qgV/tcHH2DylCno9fTTNURfOH8eK1esxICBA/HwI4/USLcVQUNYaampqKgox5SpU2t41aQ/jCWLF+PixYuYN2+e6PxsW/JZnDYMMEPWhldNpQq1wrYKpbHjTRs34mxeHtq2a4fOXbradMJ348YN7E9Px61bZRg6bBjCw8NtiTPHsdbZTIUhTpghG0IN8kFItcJCkqilpQ6rA/v3c94+aO70vbv34OPrA5iApk2bYsizsaB9k+UG1jrLZUr7fMyQtedYlRLsaYVVKdAOIax1toMsjbIyQ9aIWDXFKm2F1cQgJYu1zlIMaZvODFmEX87B++IlOLD/ewwbPhwv6+wW1sitsBBtzmydqT9g5YoVOH4si/tMeO7554Vgul487cbIgm0Gdu7YYSorKzOVlJSYOkV0NP3000+2M2oQm3HwoGn0Sy+Zvtu3TwPp2oq8d++eaeH775te/fOfTddKS7UtzEL6hfPnTRUVFaY7d+6YRo8caZHi+qesRRb5b6bXRX4M9eXRY7Bs5QrUr19f5A7Hk2pjKyxUa2e1zsd++AFFRUUYEhsrBM3l4tnMLhGV8kZcXFyM3s88o7kR87Oz+vbrh6T5882TO0QgGjqJhrBWffqprrPCyOvJ+nXrsXTxEtCnkbsE1iJLaJoehuTNm/HiyJESOZUnu1IrLMSC3q3zX6dNR8IrCdxWsUKYXCmetcgi2qSx1y3JyRg+YgQ3BZIWJKgdXK0VFuJHj9bZ0nECbVwX+oc/CMFxuXjWIouolPxXbVi/3pxj5uzZ6BgZab525MQdWmEhfrRqnXekpHBOEmjhCLktevjhh4UguFw8M2QnqLQ2jAtrTQsbd1aXYWbI6vIpKs2dW2EhYrRqnYXKc9V4Zsg2NEv+rQ5nZiI7O5tboE9uYP386sM/wB9RUVFcBwrNVbYnsFZYmC1HW2ct9CWM1pgpzJAt9HIyOxvJm5PhXccbER0j0To0tJpTdnIJm5NzGufzzyE4JBhj4uLg5+dnIaHmKWuFa3IiFGNv66yFvoSwGT2eGTLAjTcuXbIEPr6+6D8gxuYyP2tFXi0uxrYtyRgcG4vo6GjrZO6atcI2aRGNlNM6c1NnNdCXKDCDJ7q9Id+8eRNJiYkYOnwEaMjC3rAnLQ3eXp4YP2GC+VbWCpupUHwi1DproS/FIA10o1sbMrl5fXPOHCRMnARfX1/FaqEdDe/cuY2xY8eCtcKKaaxxo3XrXM/HR3V91Si0lka4tSG/8/bbiH3ueTRs2NBh9VHL/MPRI2jUsGE131kOC2YCzL7CGjZshAl/+pMq+tq3Jw2hoaHo07evSzBsX9erS1T5QSXSdu9GWFh7VR4KkkgPhK+PL+bOm1fr50gbTc00K2xcfDye7NlTNX317tMXaWlpnLcUo9VXCR63NeTU1FR0695dCWeC9wwbMRyfb9ggmM4SlDOwd+9e0K6RaoaYQYNcRl9uachHjxxBx0jxfYxKS0psPjO0SVp+Xp7NtODgEBReKbSZxiKVM6BUX5cLCri9sIQ2tnMlfbmlIaenp6Nrt242n6xfbt7EhnXrMGfmTJvpX2/ahPVr1thMo8gWQUHIz88XTGcJ9jOgRF9L//1vXL58mXPnuyApSdBZv6voyy0NubKyUtBpu39AAKJ69ICpqqrGE3f+3DlcvXq1RrxlBG1TeuTwYcsodu4gA/bqK+f0aZzJyUHPp55Cm7Zt4eHpifR9+2yicBV9uaUhV1WZbCqVj/TwqLlhOE1CIM8TT/TowWezeWzWvDlocTsL6jFgr74yMzLQslUrM4CQkBBu/ypzhMWJq+jLLQ25pplaaFbgdPvWrbK2SaE52PXq1ROQwqKVMGCvvn766adqvdsNGzXCtdJSm0W7ir7c0pBtalQkkhZQPNamDTy9vHC/shJVJhPnaEDoFlpkwYLzGPB96CHQ6zgf7v76Kxo1bsxf1ji6gr68a9TKDSI8PO37jz+fn8+thiJqaDbYtWvXMP9vf8O8d96pwRYtrGgaGFgjnkUoZ8BefbVu3RrU080H6td4pHVr/rLa0VX05ZaGTC58aEjC1rcwadnSZQxdvzRmDPej8+NZWfj6q69sGjGl0/ajnbt0oVMWVGLAXn0907cvpyOa4kkOFGkr2JdGj7aJxlX05Zav1pGRkdz4oi3N0trWY0ePonGTJsg+frxGFnKH+0hoaI14PqLg0kV06iQ+Rs3nZUd5DNirL5o3P2PWLHz15ZfYmpyMgUOGCL4luYq+3HKuNf1TJ76TiPEJCfKeJJm56LV7z+5UvD5tmsw7WDY5DDB9SbPkli0yvW6FhbVDwaVL0gzZkWNnynbExcXZcQfLKocBpi9pltzSkImWUaNHc44BKioqpFmSkYOmbQYGBiKwWTMZuVkWexlg+hJnzG0N2cvLC5OnTsWa1asEp++JU/d7KnkLoY3eaIUOC9owwPQlzqvbGjLR4unhwU3lI2O2HHcUp6x6auGVK1i/dg1oEgL1rrKgHQNMX8Lcuq0hXzh/HrNnzcJHy5cjISEBa1atsuubmYw2ddcunDiehSUffojY2Fj8dfp0zuumMN0sRSkDTF/izLllrzX/UCz64AOzny4aO960cSPO5uWhbbt26Nylq00nfDdu3MD+9HTculWGocOGgRa98yFl+3akpKRg4aJFqFOnDh/Njg4ywPQlTaDbGbKth8KSJmppMzMzcWD/fs57BM3FvXf3Hnx8fQAT0LRpU24T7aCgIMvbzOfMmM1UqHLC9CWTRtffAvr3Gp4/d47bPLyoqOj3SA3Otm/bxm3yXV5eroF09xHJ9CVf19Rj6xZBr4eCJ5MZM8+EsiPTl328GdKQCwoKTP9Y8J59NRHJrfdDwUPRwpiTN282jR450jTmpZdMWr9Z8PUQO1ZUVJi+/OIL0769e03Xr18Xyyo7zVX0tW/vPtPYMXGm8WPHcseMgxmyObA3o+EMubKy0vT+e/8wTXvtL/bWxWZ+Zz0UPBg1jfn+/fumTz7+2ETGQzwZIbz+6mumI4cPqwbFlfS1//vvOV0ROQvmzzfduHFDNZ6sBRlu+Gn7tm0YEhsr8wtfPJtUR4n43eqkDh4yBIMHD1ZlaIpmj61ZvRqxAwch4+BBdQA6IGXnjh0oLCxEfl4+0r9Ld0DSg1tdTV/kasjb+8ECQxrtCAgIcJgjQQHWlu3M6+wTJ0ynTp0yXbxwweEW2dn/7NY8qtky0z99r55PmcrKyqyL0fV63tw3Tcs+/Mh0+/ZtU0L8eNOOlBTF5buyvk4cP276bP16xdzIudFQLfKK5cu5ZWcrV6zA6dOnsW3LVsE/ILEEI/yzW+NTs2Wmf/qnez+NoqIi62J0va6srECbtm3w0EMP4bmhz+PI4d8X89sDxNX1tXPHTsTExNhDid15DWXItEvD2Ph4jHjxRW47j+ine9ldISM+FHwlHDXm27dv86Lg6eEJ8oThzBAzcBCO/XCMg0Ab14WHd7AbjivriyeDfKRr7jVGTrOtd56SkhLT0sWL7S7WaK9nQhVQ+pq9+pNVpllvvMH1EF+6dElIvK7xX2/aZPp25y6u59reDjhX1xcpgvREvfpaB8P1WiutcG15KPj6KTVm/v7afmT6UleDLmHIte2h4FXorsbM9MU/AeodDTHXmvxkkcvZ7OxsbvUQuSf186sP/wB/REVFITwigtv6g//msDwa+RvLEqfQuZy52Y7wI1SuI/GO4GH6En+elerFqYZ8MjsbyZuT4V3HGxEdI9E6NLSac3dyVZqTcxrn888hOCQYY+Li4OfnZ65rbX8o+IoIGbOj/PDy1To6iofpS/x5dkRPTjFk2n5l6ZIl8PH1Rf8BMTaXC1pXirxwbNuSjMGxsYiOjoarPBR8PS2NmVZgOcoPL1eNI9NXTRaNpi/dDfnmzZtISkzE0OEjzGuBa9IkHLMnLQ23yn5B5qFDsFxPLHxH7UmhhyN582aQy91hI15QzI+3lyfGT5igSsWZvoRpNJK+dB1HJnexb8+bh3ETEhQ9pERpn7590TSwGZ7u3VuxDGHVODel19NPo7yiAvEJryiuG/HTwD8A69atc7gyTF/iFBpJX7oa8qKFCxE3Lh7kQNyR8GTPntwOAtQ6u1Igfqb8+VWH+aGdLirKy+EoP0xf4k+XkfSlmyGn7d6NsLD21XbJE6dJPLV3n75IS0vjvHiI56wdqUbjx2h4jKZFo/GjmyGnpqaiW/fuquojZtAgfL5hg6oynSXMaPwYDY+z9CJUrtH40cWQaWe8jpHy9kMqLi7mOrJKrl4V4tAcHxwcgsIrhebr2noil5/S0lKcy883/y5dvChaZaX8yMVDhf/444/44ehR3L51SxQLJSrFIylY5wz28HO5oADf7d2Ln3/+WRKlI/zoYsjp6eno2q2bZEXIvSxVOjQ0FCuWLcMJG5uoWQtpERSE/Px86+hadS2XnwVJSfj0k0+w7tNPsXL5cny0dKlkPZXwIxcPrUfOzMjgtixd+N57kPpjIbBK8EhWUucMcvkhB460bjzn9GlMmTgRNJFGKijlR5dtVcn5O7/AWqwiqd9+i/gJE7htV6KeeAJZx44hUmJnw/YdOuDI4cN47LHHxEQbOk0OP+QAf/qMGQgODubqsjctDZaroYQqqIQfOXhorHv50qX4YtMmruOx/8CB+HjFCiS++64QFC5eCR5RgU5IlMMPwWrRogVoySmFCxcugIby/P39RREr5UeXFrmqyiQKnk/sHhWFDxcvxpXLl7nXNfoGlgrNmjdHQUGBVDZDp8vhp0mTJmYjpsqQb23+IRGrnBJ+5OC5fv0690dCveMUgkNCcPLECTEoXJoSPJJCdc4ghx+C9IdHH+WQ0Wt1WPv2aNWqlSRSpfzoYsgekvAfZBj+wgsICQnBK/HxGDBwoKyxVPI7Xa9ePZklGDObXH549Hfv3gWt/23UuDEfJXhUwo8cPA0bNkSjRo1w8uRJrmwyaK/f3NoIgqFtetxMX6dPncL/TpuG77/7DnL6fZTyo4shiynWMi37xAk0b9GCe4Wcn5iIU789JJZ5bJ3TIgt3CkcyM9H9iSdkV1kLfmhTtdnz5uHrr77C2tWrkfzNN7I/b7TAI5sMnTN2CA/HilWr8Ohjj+ELmSMsSvjRxZA9POX8xwOrPv6Ym0s9cNAgvDJpEr7ZtEmSdlpYobn3BUkUjmWQyw9fCv27P9VLnvcUJfzIxdMxMhJ/f/99jJswAeQFY+SoUTxEwaMSPILCnJQglx8eHv3p0TNN/QpSQSk/uhgyVcBkkv5OfsjXFz8WPhhOCmnZEnXq1pWqN3Jzc0EzmWpzkMsP1bG8vBzkkZH2YpYTlPBjDx7C8NWXX3LfyF0ff1wSkhI8kkJ1ziCXn8uXL5uR0cjKs88/b74WOlHKjy6GHBkZidwzZ4Swm+P/Mn0611O9a8cOnMjKwqTJk81pQicFly6ik0TPttC9RomXyw/hzc3Jkd0aU34l/MjFc/rkSXy9aRM3yvDatGmy6FSCR5ZgHTPJ5Yc+O96bP5/bR+yJHj3wWJs2kiiV8qPL8FPffv2Q+E4i13MnVhP6Pk6YOFEsS7U0mtRP87bp1aU2B7n8UB07durE/eTUVyk/cvF0iIgA/eQGpXjkytcrn1x+5P658bgd4UeXFrlu3boIC2tn1/7DfOXEjjtTtiMuLk4sS61IMxo/RsNjNCUakR9dDJkUMWr0aM4xQEVFhSp6oV0X6DsxsFkzVeQ5W4jR+DEaHmfrx7p8o/GjmyHT6+/kqVOxYd1aWR1f1sRZXpeUlCDjwH6Mi4+3jK7V50bjx2h4jKZco/Hj9dZbb72lF0mNGzfmJjFs/PJL7tuKBr/tDYVXrmBXSgpmz52DOnXq2Hu7ofMbjR+j4TGa8ozEj+6ufkgZ5G9r5YqV3Oythx95RJZ+qMs/LTUVFRXlmDJ1qqBXTVnCDJ7JaPwYDY/R1GcEfpxiyKSI+/fvczsU0r5BNA7cuUtXm73PNGZK84qP/fAD4l6OQ/8BA4ymR03w2MvPrVtlGDpsGMLDwzXDs2njRpzNy0Pbdu0k9aU1Hk0q6YBQ0pcz+XGaIVNX+/9Mn44Ply1DZmYmN9ZGc4jpdfve3Xvw8fUBTEDTpk0x5NlY0IqTD5cswfwFCxygu/bcai8/QUFBulSO3ozk6EsvPLpU2o5CnMWP0wz5w6VL0aVLF5D/Lblh9qxZmDhpktM3L5OL15F8SvhxpDx2b+1mwP7eJhXqS60NOQ2wx4ip2P+ePBnLP/pIBQTGFqGUH2PXiqHTkgFVDJleiT9dtRrbt23DmtWfSuJdu2YN4sePl8xnnYHWc3p6eeGihIsbWnC/YtlyfLtrF77auNFajG7XtA717+++W81zBuEhx20bPvtMEIdSfgQFsgSXZ0AVQ96xfTu3JnhIbCxo/SWtlRUKjrY2clrlVR9/wq1rHhATg71pe2QvhxTCrDTex8cHly5eAu3UQOFQRgbO5OSApvhVlFdg65YtNUQ7yk8NgSzCLRhQxZDJO+a6tWvx3b59ePiRh7kd7IXYc7S1kdMqn83NRQP/BhyEDuEdcGD/ASE4msZTj3ydur+Pdad+m8r1+FKhbdq2wc6UHTXKd5SfGgJZhFswoIohk3E99/xzeON/ZyCiY0dB4tRqbaRa5aeio5GybTvnI4laxAYNHhi1IDCdEq5f/9ns1zsgIKCGZ0W1+NGpOqwYAzGgiiGTJw+aSL7x/zZhftK7oCmUtoJarY1UqzxqzGgMGjIY33+XjqKiIjzZ80lbcHSPo6G0W2UP3MZeu3YN1pNh1OJH94qxAp3OgCqGnJWVhQb+/iBnAIOHDOZmblnXTO3WRqpV7v3MM/Dy9kLXbl05d63WeJxxTd/stHCcwpUrV9CvXz8zDLX5MQtmJ27BgCqG/MfhwzmPitRLTPNPyZWtdVC7tRFrla+VlmJHSgq3Wfrr06dbQ9HtmuaFe3t5Iycnh5vQ0u3xx9GuXTuu15perfvH/D5LTW1+dKskK8gYDJh0CGVlZab/mjhR9ZIKCgpMb8yYobpcvQVqxY/e9WDlOY8BVVpkqb8krVobsVZZCpOR0rXix0h1ZFi0ZcAhVz+0BcbhzExkZ2eDHAaQG08/v/rwD/BHVFQUwiMiuDFlmsVFK5a0CPStzM/BloNHydJJpbjl4KExdy35UYqd3Ve7GFA01/pkdjaSNyfDu443IjpGonVoaDUn8eTSMyfnNM7nn8PVq8V4ceRIboNyraiZMnky921O23FI4QkOCcaYuDj4+flpBQdG40ezijLBhmHALkOmGUpLlyyBj68v+g+Isbns0LpmxcVF2L5lC+evOjo62jrZoWseD7nNHThosCw8V4uLOZdDg2NjoRUeo/DjELns5lrFgGxDpg2okhITMXT4CFlbuVizsCctDd5enhg/YYJ1kqJrhkcRbewmF2VAliHTGOebc+YgYeIkzv2sUi5od8U7d25j7NixSkVw9zE8DtHHbnZBBmT1Wi9auBBx4+IdMmLijjyB0GZf1Do7EhgeR9hj97oiA5KGTEvuwsLam+cIO0pC7z59kZaWBlr6qCQwPEpYY/e4OgOShpyamgpa3aRmoH2PP5e5M511uQyPNSPsmjEAiBry0SNH0DGykyyeiouLuTHlX27elMwfHByCwisPNmuTzGyRwR48/G15Z8/yp4JHvfDQsBz5HpMKSvFIyWXprsuAqCGnp6eja7dukrWn113aI3fDunVIiI9H4W87Kord2CIoCLRDnT1BLh5eJi3inzVjBn8petQSD+2g+H16OuLj4rg56aJAfktUgkeOXJbHNRkQNWRqPbwldqEnN6DUgTVj5kz8c/FidOrcGd/u3CnJVvsOHXDk8GHJfJYZ5ODh8//666+ct5LK+/f5KNGjlnhoiWd0r16yxrl5kErw8Peyo/sxIGrIVVXSexp7eHigf0yMmbmWLVuifv365muhk2bNm6OgoEAo2Wa8HDz8jdu3buUmofDXUket8XDle8jb8J3yKsEjVUeW7roMiBqynMeO5i7TPjh8uHDhAmIGDuQvBY90X7169QTTbSXIwUP3ZRw4gC5du3LODmzJsRWnJR5b5UnFKcEjJZOluy4DooZsb7X37d2LMS+/DP+AAFm30iILtUNpaSnnQqdlq1bcKz/Jp29Uk0n67UILPI7Uz2h4HKkLu1dbBkRXP3l4ym0DgeNZWaDF8mHt28tCTD24TQMDZeXlM8nBc/HCBW6PKNonisLdX3/lOrzoG55eV4WCVniEypOKV4JHSiZLd10GRA2Ztr+gloy+g8UC7VWcm5ODJ596itvMnHx49e7TR9SbJrm8oZle9gQ5eLpHRYF+fPjjc8/h/Q8+4C8Fj1rhsSywSmbHG92jBI9lWezcvRgQfbWOjIxE7pkzoozQa+t/vvgCmYcO4V+LFuHf//wniouKRI2YBBZcuohOneSNUfMA5ODh8/LHiIgI/lT0qCUe6tnft2cP2rRti8yMDFmz2pTgEa0gS3RpBkRbZHKknvhOoujrMg2tzJo71y6SaNGDr69vtU4yOQLk4LGWkzh/vnVUjWut8VBnIL2h0E9OUIpHjmyWxzUZEG2RyUjDwtpxr8tqVn9nynbExcXZLZLhsZsydoObMCBqyMTBqNGjuYX45MpHjUDf04GBgQhs1kyROIZHEW3sJhdnQNKQ6bVw8tSp2LBurawhHDG+yHF9xoH9GBcfL5ZNNI3hEaWHJbopA5KGTLw8+uijGP7CC/hs7VpZk/5tcUk+nlO2bsXM2bPt/ja2lsfwWDPCrt2dAVkeQniSLpw/j5UrVmLAwIE1tjvh81gfaciIxnQrKso5T5o0Y0mtwPCoxSSTU9sZsMuQqbI0lLJp40aczcvjdhbs3KWrzRb2xo0b2J+ejlu3yjB02DCEh4drwhXDowmtTGgtY8BuQ+brRy1tZmYmDuzfz42LUkt77+49+Pj6ACaANiwb8mwsgoKC+Fs0PTI8mtLLhBucgf8HslkGz1Qe4XQAAAAASUVORK5CYII=" alt="" />
</p><p>
</p><p>Heap的性质: 1、父节点大于子节点</p><p>2、如果从根节点从从上之下,从左之后遍历节点,节点号依次从1递增,那么有如果下性质:</p><p>假设节点号为i,父节点Parent(i) = i/2,左儿子Left(i) = 2*i,右儿子Right(i) = 2*i + 1,对任意节点i,如果有父节点或者子节点的话,Key[Paren(i)] >= Key[i].</p><p> Heap应用-堆排序</p><p>推排序的原理:将带排序的序列首先建立起堆(满足堆的性质),这样会得到序列的极值,依次迭代或者递归不断区极值,得到最后的排序结果。可以将推排序抽象成几个子过程:</p><p>1、MAX-HEAPIFY:对堆的节点操作使得以该节点为根节点的子树满足堆的性质。</p><p>2<a target=_blank name="OLE_LINK2"></a><a target=_blank name="OLE_LINK1">、</a>BUILD-MAX-HEAP</p><p>3、HEAP-SORT</p><p>
</p><p>
</p><p>
</p><p>
</p>

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define LEFT(x)    (((x) + 1) << 1) - 1
#define RIGHT(x)   (((x) + 1) << 1)
#define PARENT(x)  (((x) - 1) >> 1)

int rand_gen(void)
{
    int num = 0;
    num = rand()%100;
    return num;
}

void max_heapify(int *input, int index, int size)
{
    int left = 0;
    int right = 0;
    int max = 0;
    int tmp = 0;

    left = LEFT(index);
    right = RIGHT(index);

    if(size > left && input[left] > input[index])
    {
         max = left;
    }
    else
    {
         max = index;
    }

    if(size > right && input[right] > input[max])
    {
         max = right;
    }

    if(max != index)
    {
         tmp = input[index];
         input[index] = input[max];
         input[max] = tmp;
         max_heapify(input, max, size);
    }
}


void build_max_heap(int *input, int size)
{
   int i = 0;
   int start = size / 2 - 1;
   for(i = start; i >=0; i--)
   {
       max_heapify(input, i, size);
   }
}

void heap_sort(int *input, int size)
{
    int i = 0;
    int tmp = 0;
    build_max_heap(input, size);
    for(i = size -1; i >=1; i--)
    {
        tmp = input[0];
        input[0] = input[i];
        input[i] = tmp;
        max_heapify(input, 0, i);
        
    }
   
}


int main()
{
   int len = 100;
   int i = 0;
   int *data = NULL;
   clock_t start, end;
   
   data = malloc(len * sizeof(int));
   for(i = 0; i < len; i++)
   {
      data[i] = rand_gen();
   }
   data[len - 1] = len / 2;
   start = time(NULL);
   
   heap_sort(data, len);

   end = time(NULL);
   printf("The cost time is %d\n", (int)(end- start));
   
   for(i = 0; i< len; i++)
   {
       printf("%d, ", data[i]);
  
   }

   
   return 1;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值