如何在升序中对数组的前k个元素进行排序,并在JAVA中按降序排列?

时间:2016-10-22 23:01:54

标签: arrays sorting data-structures merge

按升序排序数组的前k个元素,并按降序排列。

Example :  
Input -  { 9 3 2 8 7 4 1 5 6 }   
for **k = 4**  
Output - { 2 3 8 9 7 6 5 4 1 }

2 个答案:

答案 0 :(得分:0)

在java中,你可以在代码片段下面。

1)首先按升序排序,然后按降序排列。

包数组;

//按升序将元素排序为k,按降序排序为k 公共类排序{

 static int[] sortArrayAsc(int[] arr, int initial,int finalvalue)
{

//   System.out.println("initial="+initial+" "+"final="+finalvalue);

     while(initial!=finalvalue)
     {
         int index=findMinimum(arr,initial,finalvalue);
//       System.out.println("index="+index);
//       System.out.println("arr value at index="+arr[index]);
         int temp=arr[initial];
         arr[initial]=arr[index];
         arr[index]=temp; 
         initial++;
     }

     return arr;
}

 static int[] sortArrayDsc(int[] arr, int initial,int finalvalue)
    {
    System.out.println("initial="+initial+" "+"final="+finalvalue);

         while(finalvalue!=initial)
         {
             int index=findMinimum(arr,initial,finalvalue);
        //   System.out.println("index="+index);
        //   System.out.println("arr value at index="+arr[index]);
             int temp=arr[finalvalue];
             arr[finalvalue]=arr[index];
             arr[index]=temp; 
             finalvalue--;
         }
         return arr;
    }

static int findMinimum(int[] arr,int initial,int finalvalue)
{
    int index = initial;
    int minimum=initial;
    while(index!=finalvalue-1)
    {
        if(arr[index+1]<arr[minimum])
        {
            minimum=index+1;
        }
        index++;
    }

    return minimum;
}

static void print(int[] arr)
{
    System.out.println("" );
    for(int i=0;i<arr.length;i++)
    {
        System.out.print(arr[i]+" ");
    }

}

public static void main(String[] args)
{

    int[] arr={42,12,5,55,6,61,3,59,32,1,8};
    int k=4;
    //result should be 5,12,42,55,61,59,32,8,6,3,1

    arr=sortArrayAsc(arr,0,4);

    print(arr);
    arr=sortArrayDsc(arr,4,arr.length-1);
    print(arr);
}

}

答案 1 :(得分:-1)

这是C中的数组程序,其中K之前的元素以升序排列或排序,而K之后的元素以降序排列(类似于数组的前半部分和后半部分按升序和降序排列) )。 解决方案:

#include <stdio.h> #define max 999 void main () { int n, i, j, k, arr[max], temp; printf ("enter the no of values \n"); scanf ("%d", &n); printf ("enter the values \n");for (i = 0; i < n; i++)
{
  scanf ("%d", &arr[i]);
} printf ("enter the no  \n"); scanf ("%d", &k); printf ("the given arry is \n"); for (i = 0; i < n; i++)
{
  printf ("%d", arr[i]);
  printf ("\n");
}for (i = 0; i < k; i++)
{
  for (j = 0; j < k; j++)
{
  if (arr[j] > arr[i])
    {
      temp = arr[j];
      arr[j] = arr[i];
      arr[i] = temp;
    }
}
} printf ("ascending order is \n"); for (i = 0; i < k; i++)
{
  printf ("%d", arr[i]);
  printf ("\n");
} printf ("\n"); for (i = n - 1; i >= k; i--)
{
  for (j = n - 1; j >= k; j--)
{
  if (arr[j] < arr[i])
    {
      temp = arr[i];
      arr[i] = arr[j];
      arr[j] = temp;
    }
}
} printf ("decending order is \n"); for (i = n - 1; i >= k; i--) {
  printf ("%d", arr[i]);
  printf ("\n");
} }