一个简单的Haskell和Ruby的快排

Haskell的:

 import System.Random
 import System.Time
 
 lst = [552, 823, 940, 701, 283, 439, 494, 376, 873, 610, 30, 615, 981, 225, 18, 665, 711, 698, 199, 98, 418, 800, 741, 63, 628, 504, 784, 194, 972, 100, 541, 50, 817, 921, 214, 971, 888, 277, 289, 879, 958, 517, 840, 254, 687, 197, 60, 715, 186, 56, 896, 32, 171, 581, 272, 817, 118, 727, 151, 640, 448, 850, 53, 155, 538, 630, 107, 931, 219, 149, 261, 846, 944, 79, 213, 281, 552, 935, 201, 416, 357, 316, 581, 241, 947, 968, 437, 215, 412, 760, 30, 400, 535, 880, 899, 226, 176, 174, 75, 358, 852, 362, 65, 345, 481, 426, 993, 877, 842, 742, 585, 217, 984, 744, 162, 747, 631, 436, 106, 696, 256, 735, 638, 378, 960, 925, 326, 161, 173, 910, 430, 534, 651, 380, 632, 256, 152, 412, 272, 36, 492, 311, 270, 474, 579, 89, 707, 137, 740, 866, 710, 970, 544, 842, 51, 859, 545, 149, 520, 69, 12, 414, 536, 32, 126, 299, 251, 284, 769, 18, 16, 490, 46, 188, 95, 166, 831, 124, 487, 301, 674, 894, 190, 407, 513, 174, 336, 332, 456, 110, 146, 882, 534, 350, 819, 34, 271, 803, 777, 903, 744, 742, 135, 612, 539, 184, 285, 365, 167, 289, 358, 945, 750, 21, 571, 320, 850, 261, 243, 876, 58, 677, 12, 314, 87, 417, 439, 344, 852, 199, 844, 533, 713, 168, 948, 754, 3, 641, 636, 731, 764, 741, 977, 622, 471, 861, 240, 241, 826, 416, 655, 741, 729, 4, 390, 584, 348, 151, 721, 952, 885, 224, 441, 660, 883, 969, 322, 182, 531, 226, 28, 311, 841, 287, 121, 933, 883, 688, 839, 70, 103, 59, 66, 194, 340, 86, 280, 641, 162, 964, 595, 146, 510, 406, 174, 814, 561, 892, 55, 97, 339, 289, 672, 211, 225, 979, 827, 492, 995, 208, 322, 566, 329, 598, 245, 579, 44, 622, 674, 246, 118, 754, 753, 180, 572, 708, 896, 632, 924, 221, 866, 613, 433, 11, 433, 169, 770, 848, 320, 117, 552, 909, 38, 732, 810, 768, 892, 337, 790, 110, 353, 908, 992, 531, 990, 425, 545, 574, 152, 129, 992, 481, 264, 86, 539, 730, 754, 782, 475, 318, 636, 792, 261, 1, 245, 289, 846, 930, 676, 449, 127, 973, 651, 309, 906, 385, 805, 682, 690, 572, 805, 232, 287, 344, 626, 422, 91, 432, 572, 285, 880, 782, 557, 983, 308, 579, 301, 237, 536, 596, 830, 593, 631, 740, 95, 36, 930, 99, 556, 239, 533, 346, 639, 421, 479, 708, 185, 664, 419, 516, 768, 376, 162, 645, 871, 652, 442, 22, 941, 18, 254, 840, 439, 132, 850, 357, 906, 243, 846, 773, 829, 583, 169, 573, 89, 775, 82, 633, 208, 273, 71, 252, 125, 188, 977, 59, 425, 597, 440, 911, 648, 988, 820, 465, 903, 794, 326, 883, 669, 612, 258, 690, 782, 553, 592, 29, 662, 530, 948, 289, 468, 492, 253, 369, 444, 464, 377, 797, 757, 229, 502, 755, 815, 613, 61, 409, 77, 727, 182, 846, 360, 359, 499, 475, 56, 508, 768, 942, 533, 760, 503, 520, 163, 445, 913, 515, 181, 610, 132, 561, 895, 74, 52, 172, 480, 626, 551, 652, 505, 728, 352, 57, 406, 313, 815, 685, 242, 286, 36, 54, 938, 739, 698, 562, 762, 992, 684, 431, 297, 853, 842, 760, 443, 481, 300, 868, 719, 768, 422, 391, 712, 398, 955, 415, 594, 717, 339, 108, 336, 635, 652, 621, 225, 982, 305, 491, 26, 194, 261, 494, 878, 258, 913, 915, 267, 7, 882, 482, 327, 702, 488, 79, 716, 770, 717, 6, 727, 904, 772, 66, 274, 11, 867, 700, 496, 781, 163, 403, 215, 39, 992, 753, 161, 72, 826, 464, 957, 555, 551, 129, 706, 761, 676, 275, 394, 645, 57, 18, 286, 835, 254, 195, 519, 245, 610, 714, 563, 211, 618, 804, 311, 958, 524, 57, 94, 588, 814, 114, 926, 415, 949, 871, 795, 147, 436, 620, 236, 305, 278, 267, 708, 327, 565, 792, 225, 305, 602, 188, 756, 736, 624, 560, 938, 50, 807, 963, 255, 986, 717, 555, 848, 11, 727, 215, 823, 755, 224, 371, 635, 437, 423, 115, 927, 392, 636, 650, 851, 912, 162, 728, 747, 716, 596, 74, 364, 351, 364, 214, 635, 517, 993, 482, 356, 739, 95, 904, 298, 723, 588, 438, 437, 566, 731, 135, 391, 715, 533, 140, 416, 646, 653, 823, 461, 308, 193, 21, 816, 174, 136, 580, 554, 471, 873, 597, 339, 490, 137, 303, 483, 551, 30, 272, 534, 410, 141, 300, 994, 447, 979, 593, 743, 363, 167, 64, 41, 596, 824, 734, 4, 849, 274, 346, 516, 623, 364, 762, 18, 931, 900, 852, 209, 345, 178, 490, 221, 74, 100, 227, 507, 481, 112, 467, 696, 907, 58, 641, 302, 123, 903, 741, 707, 192, 932, 944, 142, 921, 756, 848, 400, 66, 894, 676, 325, 860, 264, 887, 819, 480, 421, 998, 245, 373, 641, 919, 962, 704, 88, 635, 444, 688, 961, 817, 291, 276, 183, 256, 663, 965, 458, 582, 301, 40, 149, 186, 136, 146, 631, 986, 418, 228, 179, 445, 255, 868, 618, 176, 468, 963, 944, 658, 564, 765, 738, 804, 548, 728, 764, 154, 555, 488, 706, 23, 415, 684, 103, 88, 521, 621, 399, 446, 457, 73, 452, 443, 169, 240, 984, 818, 411, 12, 424, 372, 53, 503, 241, 412, 842, 919, 92, 523, 807, 869, 47, 944, 832, 685, 274, 941, 586, 552, 850, 329, 739, 832, 526, 283, 922, 256, 496, 216, 866, 785, 258, 906, 262, 284, 622, 144, 75, 924, 952, 973, 848, 652, 35, 752, 896, 319, 34, 825, 199, 980, 690, 639, 438, 880, 92, 895, 791, 903, 101, 251, 666, 291, 360, 785, 576, 524, 285, 583, 205, 618, 616, 540, 598, 28, 710, 629, 527, 84, 828, 497, 773, 970, 138, 399, 732, 23, 417, 699, 425, 639, 967, 515, 163, 126, 757, 75, 527, 848]
 
 qsort [] = []
 qsort (first:therest) = 
	qsort (filter (< first) therest) ++ [first] ++ qsort (filter (>= first) therest)
	 
 main = do 
	starttime <- getClockTime
	let ddd = qsort lst
	print ddd
	endtime <- getClockTime
        let dd = diffClockTimes endtime starttime
	putStrLn ("it's spent " ++ show(dd))
 
运行结果:


Ruby的:

arrayInt = Array.new

arrayInt = [552, 823, 940, 701, 283, 439, 494, 376, 873, 610, 30, 615, 981, 225, 18, 665, 711, 698, 199, 98, 418, 800, 741, 63, 628, 504, 784, 194, 972, 100, 541, 50, 817, 921, 214, 971, 888, 277, 289, 879, 958, 517, 840, 254, 687, 197, 60, 715, 186, 56, 896, 32, 171, 581, 272, 817, 118, 727, 151, 640, 448, 850, 53, 155, 538, 630, 107, 931, 219, 149, 261, 846, 944, 79, 213, 281, 552, 935, 201, 416, 357, 316, 581, 241, 947, 968, 437, 215, 412, 760, 30, 400, 535, 880, 899, 226, 176, 174, 75, 358, 852, 362, 65, 345, 481, 426, 993, 877, 842, 742, 585, 217, 984, 744, 162, 747, 631, 436, 106, 696, 256, 735, 638, 378, 960, 925, 326, 161, 173, 910, 430, 534, 651, 380, 632, 256, 152, 412, 272, 36, 492, 311, 270, 474, 579, 89, 707, 137, 740, 866, 710, 970, 544, 842, 51, 859, 545, 149, 520, 69, 12, 414, 536, 32, 126, 299, 251, 284, 769, 18, 16, 490, 46, 188, 95, 166, 831, 124, 487, 301, 674, 894, 190, 407, 513, 174, 336, 332, 456, 110, 146, 882, 534, 350, 819, 34, 271, 803, 777, 903, 744, 742, 135, 612, 539, 184, 285, 365, 167, 289, 358, 945, 750, 21, 571, 320, 850, 261, 243, 876, 58, 677, 12, 314, 87, 417, 439, 344, 852, 199, 844, 533, 713, 168, 948, 754, 3, 641, 636, 731, 764, 741, 977, 622, 471, 861, 240, 241, 826, 416, 655, 741, 729, 4, 390, 584, 348, 151, 721, 952, 885, 224, 441, 660, 883, 969, 322, 182, 531, 226, 28, 311, 841, 287, 121, 933, 883, 688, 839, 70, 103, 59, 66, 194, 340, 86, 280, 641, 162, 964, 595, 146, 510, 406, 174, 814, 561, 892, 55, 97, 339, 289, 672, 211, 225, 979, 827, 492, 995, 208, 322, 566, 329, 598, 245, 579, 44, 622, 674, 246, 118, 754, 753, 180, 572, 708, 896, 632, 924, 221, 866, 613, 433, 11, 433, 169, 770, 848, 320, 117, 552, 909, 38, 732, 810, 768, 892, 337, 790, 110, 353, 908, 992, 531, 990, 425, 545, 574, 152, 129, 992, 481, 264, 86, 539, 730, 754, 782, 475, 318, 636, 792, 261, 1, 245, 289, 846, 930, 676, 449, 127, 973, 651, 309, 906, 385, 805, 682, 690, 572, 805, 232, 287, 344, 626, 422, 91, 432, 572, 285, 880, 782, 557, 983, 308, 579, 301, 237, 536, 596, 830, 593, 631, 740, 95, 36, 930, 99, 556, 239, 533, 346, 639, 421, 479, 708, 185, 664, 419, 516, 768, 376, 162, 645, 871, 652, 442, 22, 941, 18, 254, 840, 439, 132, 850, 357, 906, 243, 846, 773, 829, 583, 169, 573, 89, 775, 82, 633, 208, 273, 71, 252, 125, 188, 977, 59, 425, 597, 440, 911, 648, 988, 820, 465, 903, 794, 326, 883, 669, 612, 258, 690, 782, 553, 592, 29, 662, 530, 948, 289, 468, 492, 253, 369, 444, 464, 377, 797, 757, 229, 502, 755, 815, 613, 61, 409, 77, 727, 182, 846, 360, 359, 499, 475, 56, 508, 768, 942, 533, 760, 503, 520, 163, 445, 913, 515, 181, 610, 132, 561, 895, 74, 52, 172, 480, 626, 551, 652, 505, 728, 352, 57, 406, 313, 815, 685, 242, 286, 36, 54, 938, 739, 698, 562, 762, 992, 684, 431, 297, 853, 842, 760, 443, 481, 300, 868, 719, 768, 422, 391, 712, 398, 955, 415, 594, 717, 339, 108, 336, 635, 652, 621, 225, 982, 305, 491, 26, 194, 261, 494, 878, 258, 913, 915, 267, 7, 882, 482, 327, 702, 488, 79, 716, 770, 717, 6, 727, 904, 772, 66, 274, 11, 867, 700, 496, 781, 163, 403, 215, 39, 992, 753, 161, 72, 826, 464, 957, 555, 551, 129, 706, 761, 676, 275, 394, 645, 57, 18, 286, 835, 254, 195, 519, 245, 610, 714, 563, 211, 618, 804, 311, 958, 524, 57, 94, 588, 814, 114, 926, 415, 949, 871, 795, 147, 436, 620, 236, 305, 278, 267, 708, 327, 565, 792, 225, 305, 602, 188, 756, 736, 624, 560, 938, 50, 807, 963, 255, 986, 717, 555, 848, 11, 727, 215, 823, 755, 224, 371, 635, 437, 423, 115, 927, 392, 636, 650, 851, 912, 162, 728, 747, 716, 596, 74, 364, 351, 364, 214, 635, 517, 993, 482, 356, 739, 95, 904, 298, 723, 588, 438, 437, 566, 731, 135, 391, 715, 533, 140, 416, 646, 653, 823, 461, 308, 193, 21, 816, 174, 136, 580, 554, 471, 873, 597, 339, 490, 137, 303, 483, 551, 30, 272, 534, 410, 141, 300, 994, 447, 979, 593, 743, 363, 167, 64, 41, 596, 824, 734, 4, 849, 274, 346, 516, 623, 364, 762, 18, 931, 900, 852, 209, 345, 178, 490, 221, 74, 100, 227, 507, 481, 112, 467, 696, 907, 58, 641, 302, 123, 903, 741, 707, 192, 932, 944, 142, 921, 756, 848, 400, 66, 894, 676, 325, 860, 264, 887, 819, 480, 421, 998, 245, 373, 641, 919, 962, 704, 88, 635, 444, 688, 961, 817, 291, 276, 183, 256, 663, 965, 458, 582, 301, 40, 149, 186, 136, 146, 631, 986, 418, 228, 179, 445, 255, 868, 618, 176, 468, 963, 944, 658, 564, 765, 738, 804, 548, 728, 764, 154, 555, 488, 706, 23, 415, 684, 103, 88, 521, 621, 399, 446, 457, 73, 452, 443, 169, 240, 984, 818, 411, 12, 424, 372, 53, 503, 241, 412, 842, 919, 92, 523, 807, 869, 47, 944, 832, 685, 274, 941, 586, 552, 850, 329, 739, 832, 526, 283, 922, 256, 496, 216, 866, 785, 258, 906, 262, 284, 622, 144, 75, 924, 952, 973, 848, 652, 35, 752, 896, 319, 34, 825, 199, 980, 690, 639, 438, 880, 92, 895, 791, 903, 101, 251, 666, 291, 360, 785, 576, 524, 285, 583, 205, 618, 616, 540, 598, 28, 710, 629, 527, 84, 828, 497, 773, 970, 138, 399, 732, 23, 417, 699, 425, 639, 967, 515, 163, 126, 757, 75, 527, 848]

puts "原输入数组:"
puts arrayInt

def QuickSort(arrayInt, first, last)
  if (first == last) 
    return
  end
  i = first+1
  j = last
  while i < j
    while i < j && arrayInt[i] <= arrayInt[first]
      i += 1
    end
    while i < j && arrayInt[j] > arrayInt[first]
      j -=1
    end

    if i < j
      temp = arrayInt[i]
      arrayInt[i] = arrayInt[j]
      arrayInt[j] = temp
      i += 1
      j -= 1
    end
  end
  
  temp = arrayInt[first]
  arrayInt[first] = arrayInt[i-1]
  arrayInt[i-1] = temp
  
  QuickSort(arrayInt, first, i-1)
  QuickSort(arrayInt, i, last)
end

startTime = Time.now

QuickSort(arrayInt, 0, arrayInt.length()-1)

endTime = Time.now

costTime = (endTime - startTime) * 1000000

puts "排序后数组: "
puts arrayInt

puts "快排时间: #{costTime} us\n" 

gets

运行结果:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值