I tried to optimize heap sort algorithm. Instead of recursion, I used cycle: void max_heapify (int arr[], int heapsize, int i) { int left = 2 * i; int right = 2 * i + 1; int largest = i; do { if (i != largest) { int tmp = arr[i]; arr[i] = arr[largest]; arr[largest] = tmp; i = largest; left = 2 * i; right = 2 * i + 1; } if (left < heapsize && arr[largest] < arr[left]) largest = left; if (right < heapsize && arr[largest] < arr[right]) largest = right; } while (i != largest); } void heap_sort (int arr[], int size) { int i; for (i = size / 2 - 1; i >= 0; i--) max_heapify(arr, size, i); for (i = size - 1; i > 0; i--) { int tmp = arr[i]; arr[i] = arr[0]; arr[0] = tmp; max_heapify (arr, i, 0); } } Seems like it's ok, but is there way to improve it?