Problem
Given an array containing (0..n-1) but in random order, you can only loop through the array once and use swap operation, please sort the array.
Solution
import random
def sort_array_without_loop(a, n):
i = 0
while i < n:
if a[i] != i:
a[a[i]], a[i] = a[i], a[a[i]]
else:
i += 1
if __name__ == '__main__':
a = []
a += range(10)
random.shuffle(a)
print("Before sorting: {0}".format(a))
sort_array_without_loop(a, 10)
print("After sorting: {0}".format(a))
Output
Before sorting: [8, 0, 4, 3, 5, 7, 9, 2, 1, 6]
After sorting: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]