快速排序
作者:互联网
class QuickSortDemo { //快速排序 static void Main(string[] args) { int[] arr = new int[] { 4,2,3,8,9,6,5,1,7}; QuickSort(arr,0,8); Console.WriteLine(" " + string.Join(",", arr)); Console.ReadLine(); } static void QuickSort(int[] dataArray, int left, int right) { Console.WriteLine("------------------------------->快速排序被调用"); if (left < right) { Console.WriteLine(" --执行大循环--Left:{0}--Right:{1}",left,right); //基准数, 把比它小或者等于它的 放在它的左边,然后把比它大的放在它的右边 int x = dataArray[left]; //dataArray[0]=4 int i = left; //i=0; int j = right; //j=8; int tempNum = 0;//存放大数 while (i < j)//当i==j的时候,说明我们找到了一个中间位置,这个中间位置就是基准数应该所在的位置 { //从后往前比较 //找到了一个比基准数 小于或者等于的数子,应该把它放在x的左边 while (i < j) { tempNum = dataArray[j]; // Console.WriteLine(" 现在的基准值为:{0}",x); //最右边的数小于等于【基准数】,就把该数放到【基准数】的位置上 if (tempNum <= x) { Console.WriteLine(" i={0},j={1},j{1}为{2},小于基准值{3}",i,j, dataArray[j],x); dataArray[i] = dataArray[j]; Console.WriteLine(" 把{0}位置的数字{1}放到{2}位置",j, dataArray[j], i); break; } else { Console.WriteLine(" j为{0},j{0}为{1}不小于基准值{2},执行j--", j, tempNum,x); j--;//向左移动 到下一个数字,然后做比较 } } Console.WriteLine(" "+string.Join(",", dataArray)); //从前往后 while (i < j) { if (dataArray[i] > x) // { Console.WriteLine(" i={0},j={4},i{1}为{2},大于基准值{3}", i, i, dataArray[i], x,j); dataArray[j] = dataArray[i]; Console.WriteLine(" 把{0}位置的数字{1}放到{2}位置", i, dataArray[i], j); break; } else { Console.WriteLine(" i为{0},i{0}为:{1},不大于基准值{2},执行i++", i, dataArray[i],x); i++; } } Console.WriteLine(" 结果为:"+string.Join(",", dataArray)); } //跳出循环 现在i==j i是中间位置 dataArray[i] = x; Console.WriteLine(" ========>中间位置========{0}",i); QuickSort(dataArray, left, i - 1);// left -i- right QuickSort(dataArray, i + 1, right); } else { Console.WriteLine(" Left为{0},Right为:{1},Left>=Right,跳出",left,right); } } }
输出排序过程:
标签:right,Console,int,WriteLine,排序,快速,dataArray,left 来源: https://www.cnblogs.com/25miao/p/12606241.html