def separate_pos_neg(int_list):
    """
    Put negative values before nonnegative ones and return the split index
    int_list: list of int, length >= 1
    """   
    k = 0
    j = len(int_list)

    # INV: int_list[0..k-1] < 0, int_list[0..j-1] >= 0
    while  k < j:
        if int_list[k] < 0:
            # kth element can stay where it is
            k = k + 1
        elif int_list[j-1] >= 0:
            # jth element can stay where it is
            j = j - 1
        else:
            # both need to move
            tmp = int_list[k]
            int_list[k] = int_list[j-1]
            int_list[j-1] = tmp
            k = k + 1
            j = j - 1

    return k

list1 = [2,6,5,8,2,-5]
print("The original list is "+str(list1))
k = separate_pos_neg(list1)
print("The separated list is "+str(list1)+", with k = "+str(k))

list1 = [20,6,15,-8,2,-5]
print("The original list is "+str(list1))
k = separate_pos_neg(list1)
print("The separated list is "+str(list1)+", with k = "+str(k))

list1 = [20,-6,15,-8,0,-5,40,-9]
print("The original list is "+str(list1))
k = separate_pos_neg(list1)
print("The separated list is "+str(list1)+", with k = "+str(k))