for(int i = 0; i < n; i++) {
for(int j = 0; j < i; j++){
//do swap stuff, constant time
}
}
I read that single for loop is O(N) a
You need to use the ancient and obscure art of mathematics and calculate the number of times that the inner statement is executed.
In your case, the inner loop is executed i times. The values for i are 0, 1, 2, ..., n-1. So you need a formula that calculates this sum, and that's your result.
You read that a single loop is O (n). That's nonsense. It depends on the loop.
for (i = 1; i < n; i *= n)
doesn't iterate n times. It iterates log2 (n) times, which is usually an awful lot less. You need to look at the actual code and figure it out. There is no simple rule for this.
A function that loops from i = 1 to n and then has a inner loop that goes from 1 to i would go though a number of iteration equal to this formula:
n(n+1)/2
As you can see, when we get rid of everything besides the main exponent, you end with O(n^2)
As you mentioned
Each takes unit of 1 - O(1)
So each iteration of the inner loop takes 1, 2, 3, ... , n unit time.
total_time = 1 + 2 + 3 + ... + (n-2) + (n-1) + n
Reversing
total_time = n + (n-1) + (n-2) + ... + 3 + 2 + 1
Adding
2 * total_time = (n+1) + (n+1) + (n+1) + ... + (n+1) + (n+1) + (n+1)
There are total n terms
2 * total_time = (n+1) * n
=> total_time = (n+1) * n / 2
=> total_time = n^2 / 2 + n / 2
Lower terms and constant coefficients are neglected for big O complexity.
As a result
O(n^2)