You could use (or abuse, I admit) a simple subtraction to accomplish this:
var seq = Enumerable.Range(0, 10);
int n = 4;
int m = seq.Max() + 1; // or a magic number like 1000, thanks RB.
var ordered = seq.OrderBy(x => x >= n ? x - m : x);
foreach(int i in ordered)
Console.WriteLine(i);
Moreover, if numbers get bigger, be aware of integer overflows. For simple cases it may be fine though.
Here is a better solution (inspired by other answers):
var seq = Enumerable.Range(0, 10);
int n = 4;
var ordered = seq.Where(x => x >= n).OrderBy(x => x)
.Concat(seq.Where(x => x < n).OrderBy(x => x));
foreach(int i in ordered)
Console.WriteLine(i);
It sorts each sequence. before concatenating them. T_12 asked in a comment whether they are sorted ascending. If they are, go with L.B.'s solution rather than mine, since the OrderBy
blows the effort to at least O(n log n)
instead of O(n)
(linear).