Adopted new Pointer Technique -- Class deprecated
This commit is contained in:
		@@ -10,52 +10,57 @@ namespace QuickSort
 | 
			
		||||
 | 
			
		||||
        public int[] Sort(int[] List){
 | 
			
		||||
 | 
			
		||||
            Pointer pivot = new Pointer(0, List);
 | 
			
		||||
            if(List.Length <= 1) return List;
 | 
			
		||||
 | 
			
		||||
            Pointer left = new Pointer(1, List);
 | 
			
		||||
            int pivot = 0;
 | 
			
		||||
 | 
			
		||||
            Pointer right = new Pointer(List.Length-1, List);
 | 
			
		||||
            int left = 1;
 | 
			
		||||
 | 
			
		||||
            while (right.Index >= left.Index)
 | 
			
		||||
            int right = List.Length - 1;
 | 
			
		||||
 | 
			
		||||
            while (right >= left)
 | 
			
		||||
            {
 | 
			
		||||
                while (left.Index <= right.Index && left.Value <= pivot.Value)
 | 
			
		||||
                while (left <= right && List[left] <= pivot)
 | 
			
		||||
                {
 | 
			
		||||
                    left.UpdatePointer(left.Index + 1, List);
 | 
			
		||||
                    left++;
 | 
			
		||||
                }
 | 
			
		||||
                while (right.Index >= left.Index & right.Value >= pivot.Value)
 | 
			
		||||
                while (right >= left && List[right] >= List[pivot])
 | 
			
		||||
                {
 | 
			
		||||
                    right.UpdatePointer(right.Index - 1, List);
 | 
			
		||||
                    right--;
 | 
			
		||||
                }
 | 
			
		||||
                if (right.Index > left.Index)
 | 
			
		||||
                if (right > left)
 | 
			
		||||
                {
 | 
			
		||||
                    //Swap the values of the pointers as well!!!
 | 
			
		||||
                    List = swap(List, ref right, ref left);
 | 
			
		||||
                    swap(ref List, ref right, ref left);
 | 
			
		||||
                }
 | 
			
		||||
                //Might be
 | 
			
		||||
                List = swap(List, ref pivot, ref right);
 | 
			
		||||
                swap(ref List, ref pivot, ref right);
 | 
			
		||||
                
 | 
			
		||||
                
 | 
			
		||||
                
 | 
			
		||||
            }
 | 
			
		||||
            int[] leftHalf = new int[right.Index];
 | 
			
		||||
            for (var i = 0; i <= right.Index; i++)
 | 
			
		||||
            int[] leftHalf = new int[right + 1];
 | 
			
		||||
            for (var i = 0; i <= right; i++)
 | 
			
		||||
            {
 | 
			
		||||
                leftHalf[i] = List[i];
 | 
			
		||||
            }
 | 
			
		||||
            leftHalf = Sort(leftHalf);
 | 
			
		||||
 | 
			
		||||
            int[] rightHalf = new int[List.Length - right.Index];
 | 
			
		||||
            for (var i = 0; i <= right.Index; i++)
 | 
			
		||||
            int[] rightHalf = new int[List.Length - right - 1];
 | 
			
		||||
            for (var i = 0; i <= right; i++)
 | 
			
		||||
            {
 | 
			
		||||
                rightHalf[i] = List[i];
 | 
			
		||||
            }
 | 
			
		||||
            rightHalf = Sort(rightHalf);
 | 
			
		||||
            
 | 
			
		||||
            int[] newList = new int[leftHalf.Length + rightHalf.Length];
 | 
			
		||||
            int[] newList = new int[/*leftHalf.Length + rightHalf.Length*/ List.Length];
 | 
			
		||||
            for (var i = 0; i < leftHalf.Length; i++)
 | 
			
		||||
            {
 | 
			
		||||
                newList[i] = leftHalf[i];
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            newList[leftHalf.Length + 1] = List[right];
 | 
			
		||||
 | 
			
		||||
            for (var i = 0; i < rightHalf.Length; i++)
 | 
			
		||||
            {
 | 
			
		||||
                newList[i + leftHalf.Length] = rightHalf[i];
 | 
			
		||||
@@ -65,16 +70,15 @@ namespace QuickSort
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        public int[] swap(int[] List, ref Pointer pointer1, ref Pointer pointer2){
 | 
			
		||||
            Pointer temp = pointer1;
 | 
			
		||||
        public void swap(ref int[] List, ref int pointer1, ref int pointer2){
 | 
			
		||||
            int temp = List[pointer1];
 | 
			
		||||
            //Assign both the value and index
 | 
			
		||||
            //Pointer1
 | 
			
		||||
            List[pointer1.Index] = List[pointer2.Index];
 | 
			
		||||
            pointer1.UpdatePointer(pointer2.Index, List);
 | 
			
		||||
            List[pointer1] = List[pointer2];
 | 
			
		||||
            //pointer1 = pointer2;
 | 
			
		||||
            //Pointer2
 | 
			
		||||
            List[pointer2.Index] = List[temp.Index];
 | 
			
		||||
            pointer2.UpdatePointer(temp.Index, List);
 | 
			
		||||
            return List;
 | 
			
		||||
            List[pointer2] = temp;
 | 
			
		||||
            //pointer2 = temp;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -83,14 +87,14 @@ namespace QuickSort
 | 
			
		||||
        public int Value { get; set; }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        public Pointer(int index, int[] list){
 | 
			
		||||
        public Pointer(int index, int value){
 | 
			
		||||
            this.Index = index;
 | 
			
		||||
            this.Value = list[index];
 | 
			
		||||
            this.Value = value;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void UpdatePointer(int index, int[] list){
 | 
			
		||||
        public void UpdatePointer(int index, int value){
 | 
			
		||||
            this.Index = index;
 | 
			
		||||
            this.Value = list[index];
 | 
			
		||||
            this.Value = value;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user