按给定的起始整数对整数数组进行排序

时间:2011-12-26 08:41:59

标签: c# algorithm sorting

我有一个数组:

int[] months = new int[4] {1, 4, 7, 10};

我想从给定值开始对数组进行排序,并按原始顺序对数组的其余部分进行排序。

假设我想开始按值7对数组进行排序。排序后的数组按顺序排列:

7, 10, 1, 4

或者从值4开始,排序后的数组将是一个数量级 4, 7, 10, 1

3 个答案:

答案 0 :(得分:3)

怎么样:

var orderedMonths = months.Where(x => x >= 7)
                          .OrderBy(x => x)
                          .Concat(months.Where(x => x < 7));

请注意,这意味着“数组其余部分”的元素将按照外观顺序而不是增加数字顺序。如果你的意思是后者(即在数字上对两个'段'进行排序),我会这样做:

var orderedMonths = months.OrderBy(x => x < 7) // false comes before true
                          .ThenBy(x => x);

另一方面,如果你想按照外观顺序对两个片段进行排序,我会这样做:

var orderedMonths = months.GroupBy(x => x < 7)
                          .OrderBy(group => group)
                          .SelectMany(x => x);

(或)

var orderedMonths = months.Where(x => x >= 7)
                          .Concat(months.Where(x => x < 7));

答案 1 :(得分:0)

假设这是你的排序int数组,你可以

int[] months = new int[4] { 1, 4, 7, 10 };
int value = 10; 
int[] chk1 = new int[4];
chk1 = months.SkipWhile(a => a != value).
                Concat(months.TakeWhile(a => a != value)).ToArray();

这可以为您提供所需的订单

答案 2 :(得分:0)

你能使用清单吗?

int NumberToBeFound = 7;
int IndexOfNumber = -1;
for(int i=0;i<months.count;i++){
  if(months[i] == NumberToBeFound){
    IndexOfNumber = i;
    break;
  }
}
List<int> Sorted = new List<int>();
for(int i = IndexOfNumber; i < months.count;i++){
  Sorted.Add(months[i]);
}
for(int i = 0; i < IndexOfNumber; i++){
  Sorted.Add(months[i]);
}
months = Sorted.ToArray();