快速排序改进

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */


 //* Definition for singly-linked list.

 import java.util.ArrayList;
 import java.util.Random;

  class ListNode {
      int val;
      ListNode next;
      ListNode(int x) { val = x; }
  }


class ReverseListNode{
    int val;
    ReverseListNode previous;
    ReverseListNode(ListNode listNode)
    {
        val=listNode.val;
    }


}
public class Solution {
     public void sort(int start,int end, ListNode [] nodeArray)
        {

            if(end-start<=0)
            {
                return;
            }
         else
         {
             int middle=partition(start,end,nodeArray);            

            sort(start,middle,nodeArray);
            sort(middle+1,end,nodeArray);
         }


        }
     public int partition(int start,int end, ListNode [] nodeArray)
        {


            // int middle=
            // ListNode temp=nodeArray[middle];
            int i=start;
            int j=end;

            int blank=new Random().nextInt(end-start+1)+start;



            ListNode temp=nodeArray[blank];//随机选择一个值作为中间值


            nodeArray[blank]=nodeArray[start];

            blank=start;



            while(i!=j)
            {


                while(i!=j&&nodeArray[j].val>=temp.val)
                    {
                        j--;
                    }
                if(i!=j&&nodeArray[j].val<temp.val)
                {
                   nodeArray[blank]=nodeArray[j];
                    blank=j;
                    i++;

                }



                while(i!=j&&nodeArray[i].val<=temp.val)
                {
                    i++;
                }

                if(i!=j&&nodeArray[i].val>temp.val)
                {
                    nodeArray[blank]=nodeArray[i];
                    blank=i;
                    j--;

                }




            }
            nodeArray[i]=temp;

            return i;








        }

    public ListNode sortList(ListNode head) {

         ArrayList<ListNode> arr=new ArrayList<ListNode>();
        while(head!=null)
        {
            arr.add(head);
            head=head.next;
        }

        ListNode [] nodeArray=new ListNode[arr.size()];

        nodeArray=arr.toArray(nodeArray);

        sort(0,nodeArray.length-1,nodeArray); 

        for(int i=0;i<nodeArray.length-1;i++)
        {

            nodeArray[i].next=nodeArray[i+1];
        }
        nodeArray[nodeArray.length-1].next=null;
        return nodeArray[0];





        }

        public static void main(String[] args) {
            Solution solution=new Solution();
            ListNode listNode4=new ListNode(4);
            ListNode listNode3=new ListNode(3);
            ListNode listNode2=new ListNode(2);
            ListNode listNode1=new ListNode(1);
            listNode4.next=listNode3;
            listNode3.next=listNode2;
            listNode2.next=listNode1;
            ListNode listNode=solution.sortList(listNode4);

            while(listNode!=null)
            {

                System.out.println(listNode.val);
                listNode=listNode.next;

            }

        }







    }

猜你喜欢

转载自blog.csdn.net/zhoumingsong123/article/details/80197197