Bubble Sort Challenge
For this challenge, your goal is to sort an array of numbers in Ruby, with the following guidelines:
- Cannot use any built-in sort functions
- Must be in-place (cannot create a new array)
- therefore, you'll need to swap values
The name of this challenge contains bubble sort, so you may want to either research the sort or think about how you can sort the array by having the items "bubble" up to their correct positions.
Data for testing:
numbers = [413, 445, 403, 224, 157, 312, 785, 862, 602, 354, 90, 442, 458, 641, 595, 441, 661, 690, 963, 376, 840, 463, 514, 919, 789, 423, 81, 272, 46, 981, 375, 70, 139, 955, 399, 179, 346, 369, 827, 171, 460, 982, 721, 631, 218, 200, 163, 510, 56, 30, 490, 320, 326, 327, 161, 586, 949, 244, 857, 750, 290, 716, 511, 573, 96, 340, 78, 800, 821, 417, 627, 847, 906, 672, 294, 279, 554, 709, 731, 344, 449, 790, 231, 307, 39, 574, 566, 941, 72, 884, 763, 486, 66, 578, 261, 723, 914, 104, 256, 600, 32, 358, 762, 526, 495, 367, 2, 875, 500, 165, 813, 172, 419, 616, 809, 699, 908, 945, 381, 742, 408, 575, 260, 468, 1, 959, 969, 755, 492, 135, 714, 624, 648, 336, 298, 464, 922, 18, 635, 874, 45, 370, 647, 769, 347, 772, 479, 140, 412, 118, 415, 170, 596, 798, 420, 250, 406, 73, 839, 656, 662, 512, 444, 324, 659, 363, 60, 69, 74, 633, 845, 537, 466, 19, 421, 844, 362, 166, 430, 62, 503, 202, 175, 888, 257, 696, 125, 206, 300, 726, 803, 836, 644, 741, 150, 353, 443, 233, 323, 396, 454, 356, 751, 31, 724, 747, 666, 236, 131, 151, 848, 736, 704, 240, 728, 299, 568, 990, 892, 855, 920, 424, 950, 379, 319, 304, 665, 766, 207, 846, 398, 730, 828, 177, 88, 5, 540, 44, 707, 54, 329, 357, 858, 132, 913, 84, 100, 680, 816, 551, 225, 305, 122, 757, 291, 478, 310, 583, 743, 205, 41, 186, 866, 655, 547, 764, 694, 748, 284, 8, 107, 562, 749, 679, 673, 833, 351, 28, 245, 143, 902, 20, 642, 784, 791, 604, 998, 893, 531, 989, 783, 980, 612, 221, 960, 964, 475, 268, 251, 416, 7, 992, 570, 293, 119, 116, 133, 29, 501, 316, 987, 713, 660, 504, 410, 541, 405, 418, 601, 465, 832, 854, 338, 863, 865, 219, 453, 469, 296, 975, 843, 653, 43, 211, 1000, 437, 619, 232, 685, 439, 447, 899, 697, 249, 876, 814, 801, 128, 13, 782, 237, 947, 489, 628, 544, 905, 303, 988, 390, 753, 470, 572, 10, 582, 431, 203, 180, 560, 141, 546, 65, 123, 695, 860, 598, 350, 111, 330, 943, 183, 51, 525, 775, 508, 923, 451, 682, 289, 138, 557, 640, 274, 49, 808, 286, 102, 173, 422, 456, 886, 273, 881, 765, 872, 308, 306, 35, 608, 334, 539, 625, 212, 455, 414, 850, 195, 711, 794, 282, 129, 335, 137, 962, 932, 811, 958, 101, 333, 188, 283, 771, 907, 677, 585, 227, 795, 168, 768, 910, 190, 997, 977, 281, 228, 254, 382, 158, 497, 38, 693, 687, 719, 933, 651, 758, 754, 868, 532, 965, 530, 820, 167, 159, 861, 930, 86, 246, 427, 343, 520, 124, 545, 95, 607, 924, 387, 404, 621, 113, 302, 611, 345, 230, 386, 328, 698, 321, 852, 946, 715, 134, 536, 438, 482, 898, 52, 178, 688, 515, 938, 819, 432, 556, 341, 16, 361, 927, 838, 729, 654, 318, 9, 733, 75, 26, 24, 793, 897, 538, 121, 93, 196, 339, 954, 292, 851, 645, 220, 571, 488, 162, 372, 313, 591, 457, 22, 110, 589, 563, 266, 364, 429, 710, 725, 717, 953, 505, 377, 64, 146, 325, 564, 903, 818, 271, 773, 270, 434, 277, 94, 614, 535, 740, 951, 529, 702, 384, 671, 674, 452, 594, 467, 603, 643, 181, 735, 99, 189, 870, 169, 473, 802, 629, 509, 352, 916, 761, 79, 366, 378, 617, 103, 209, 770, 502, 904, 581, 287, 285, 986, 263, 823, 548, 472, 144, 658, 901, 259, 223, 528, 984, 976, 650, 683, 280, 634, 374, 692, 92, 760, 182, 3, 380, 349, 737, 275, 174, 752, 337, 746, 37, 620, 995, 435, 87, 689, 397, 342, 278, 185, 85, 956, 499, 448, 243, 807, 389, 192, 638, 184, 450, 885, 506, 632, 744, 918, 276, 153, 780, 105, 411, 331, 204, 738, 48, 817, 193, 675, 622, 994, 667, 636, 983, 461, 891, 550, 663, 164, 147, 297, 34, 605, 931, 708, 552, 527, 11, 597, 481, 176, 966, 258, 792, 214, 580, 973, 649, 235, 565, 76, 701, 371, 606, 734, 208, 61, 829, 579, 590, 301, 657, 309, 720, 935, 14, 264, 332, 799, 426, 895, 670, 652, 974, 229, 355, 815, 55, 584, 727, 126, 63, 774, 498, 837, 767, 942, 36, 117, 407, 826, 210, 985, 993, 804, 706, 939, 613, 926, 82, 705, 360, 42, 558, 145, 841, 778, 507, 6, 388, 593, 97, 664, 686, 213, 787, 17, 567, 265, 15, 47, 21, 239, 476, 588, 58, 533, 849, 142, 433, 238, 215, 776, 676, 446, 887, 89, 523, 991, 156, 576, 940, 630, 948, 883, 879, 516, 639, 425, 485, 136, 796, 483, 921, 392, 368, 191, 67, 459, 120, 553, 267, 4, 834, 393, 252, 216, 255, 618, 517, 262, 491, 160, 409, 894, 900, 718, 822, 108, 873, 25, 197, 522, 474, 496, 201, 400, 712, 436, 519, 53, 967, 979, 915, 669, 480, 912, 952, 12, 112, 856, 77, 199, 543, 609, 806, 970, 317, 315, 972, 882, 681, 812, 911, 909, 365, 471, 98, 402, 610, 148, 810, 646, 521, 114, 217, 961, 937, 518, 241, 385, 149, 462, 373, 878, 853, 777, 957, 756, 494, 234, 484, 487, 703, 391, 869, 805, 929, 788, 824, 781, 917, 152, 599, 830, 222, 71, 968, 896, 542, 797, 248, 637, 127, 759, 877, 928, 27, 978, 678, 288, 577, 996, 477, 23, 226, 50, 401, 925, 561, 934, 40, 890, 493, 835, 864, 198, 383, 314, 295, 155, 831, 524, 322, 348, 745, 626, 57, 80, 115, 534, 825, 440, 68, 59, 971, 880, 615, 779, 722, 187, 859, 684, 154, 559, 91, 269, 513, 83, 623, 936, 786, 253, 587, 700, 555, 194, 592, 311, 130, 867, 944, 871, 109, 359, 549, 242, 668, 395, 394, 106, 999, 569, 732, 691, 428, 889, 842, 33, 247, 739]
Hint: Start figuring out how to move the first element to the right place, and go from there (the elements will have to bubble up to the top).