Yes to both questions. You should experiment with a small example if you want to see this happening. Here is an example of a perceptron in R:
fit <- function(dat, y, w){
# dat a n x 2 matrix of data points
# y an n-vector of 0/1 classifications
# w starting weight vector
counter <- 0 # count number of iterations
error <- 100
n <- nrow(dat)
while (error > 0){
error <- 0
for (i in 1:n){
fitted <- sum(w*dat[i,]) > 0
if (fitted != y[i]){
error <- error + 1
}
w <- w + (y[i] - fitted)*dat[i,]
}
counter <- counter + 1
}
print(w) # final value of w
print(counter) # number of iterations through data set until convergence
}
You can try creating a small data set to classify:
dat <- matrix(c(1,1,2,2,2,1,1,0), nc=2)
y <- c(1, 1, 0, 0) # true classes
w <- c(0, 0) # weights
Classify it:
> fit(dat, y, w)
[1] -2 3
[1] 5
> z <- c(3, 2, 1, 4) # re-order data
> fit(dat[z, ], y[z], w)
[1] -1 2
[1] 4
You can see that it reaches a different solution and takes a different number of iterations to do so.