Advertisement
Guest User

Untitled

a guest
Oct 24th, 2016
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.57 KB | None | 0 0
  1. //
  2. // main.m
  3. // alg
  4. //
  5. // Created by Sergey Demchenko on 10/6/16.
  6. // Copyright © 2016 Antrix. All rights reserved.
  7. //
  8.  
  9. #import <Foundation/Foundation.h>
  10.  
  11. int randomNumberBetween(int min, int max)
  12. {
  13. return min + arc4random_uniform(max - min + 1);
  14. }
  15.  
  16. void swap(NSMutableArray *array, int i, int j)
  17. {
  18. id tmp = array[i];
  19. array[i] = array[j];
  20. array[j] = tmp;
  21. }
  22.  
  23. BOOL less(id a, id b)
  24. {
  25. return [a compare:b] == NSOrderedAscending;
  26. }
  27.  
  28. void shuffle(NSMutableArray *array)
  29. {
  30. for (int i = 0; i < array.count; i++) {
  31. int r = randomNumberBetween(0, i);
  32. swap(array, i, r);
  33. }
  34. }
  35.  
  36. int partitioning(NSMutableArray *array, int lo, int hi)
  37. {
  38. int i = lo;
  39. int j = hi + 1;
  40.  
  41. while (true) {
  42. while (less(array[++i], array[lo])) {
  43. if (i == hi) { break; }
  44. }
  45.  
  46. while (less(array[lo], array[--j])) {
  47. if (j == lo) { break; }
  48. }
  49.  
  50. if (i >= j) { break; }
  51. swap(array, i, j);
  52. }
  53.  
  54. swap(array, lo, j);
  55.  
  56. return j;
  57. }
  58.  
  59. void sortInternal(NSMutableArray *array, int lo, int hi)
  60. {
  61. if (hi <= lo) { return; }
  62. int j = partitioning(array, lo, hi);
  63. sortInternal(array, lo, j - 1);
  64. sortInternal(array, j + 1, hi);
  65. }
  66.  
  67. void sort(NSMutableArray *array)
  68. {
  69. shuffle(array);
  70. sortInternal(array, 0, (int)array.count - 1);
  71. }
  72.  
  73. void invoke()
  74. {
  75. NSMutableArray *array = [@[ @11, @3, @7, @2, @5, @14, @1, @25] mutableCopy];
  76. sort(array);
  77.  
  78. NSLog(@"%@", array);
  79. }
  80.  
  81. int main(int argc, const char * argv[])
  82. {
  83. @autoreleasepool {
  84. invoke();
  85. }
  86. return 0;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement