今天在网上看了一下传说中的快速排序,然后试着用C#递归实现了一下:(这里是降序)

void
Main() { int[] arraytosort=new []{1,1,2,3,5,6,7,70,10,58,3,19,1,0,5,2,4,3}; Helper helper=new Helper(); var result=helper.SplitArray(arraytosort); string show=string.Join(",",result.Select(r=>r.ToString()).ToArray()); Console.WriteLine(show); } public class Helper{ public int[] SplitArray(int[] array){ string show=string.Join(",",array.Select(r=>r.ToString()).ToArray()); Console.WriteLine("最初数组:"+show); if(array.Length<=1){ return array; } int position=array.Length/2; var valueP=array[position]; array[position]=array[0]; array[0]=valueP; show=string.Join(",",array.Select(r=>r.ToString()).ToArray()); Console.WriteLine("第一次手动换结果:"+show); int comparePosition=0; for(int i=comparePosition+1;i<array.Length;i++){ Console.WriteLine("此时用来比较的基准值为:"+array[comparePosition]+"基准值下标comparePosition为:"+comparePosition+"/比较值为:"+array[i]+"比较值下标i为"+i); if(array[comparePosition]<array[i]){ Console.WriteLine("基准值小于比较值换位置"); var tempValue=array[i]; for(int j=i;j>comparePosition;j--){ array[j]=array[j-1]; } array[comparePosition]=tempValue; comparePosition=comparePosition+1; show=string.Join(",",array.Select(r=>r.ToString()).ToArray()); Console.WriteLine("换位置后结果:"+show); } else{ Console.WriteLine("基准值大于或等于比较值不换位置"); } } show=string.Join(",",array.Select(r=>r.ToString()).ToArray()); Console.WriteLine("分组结果比基准值大的"+show+ " 此时comparePosition:"+comparePosition); int[] arraySmall=new int[array.Length-1-comparePosition]; Console.WriteLine("arraySmall的length为:"+arraySmall.Length); int[] arrayLarge=new int[comparePosition]; if(arrayLarge.Length>0){ for(int i=0;i<arrayLarge.Length;i++){ arrayLarge[i]=array[i]; } } if(arraySmall.Length>0){ for(int i=0;i<arraySmall.Length;i++){ arraySmall[i]=array[comparePosition+1+i]; Console.WriteLine("arraySmall的i为:"+arraySmall[i]); } } var arrayLeft=SplitArray(arrayLarge); var arrayRight=SplitArray(arraySmall); var result=new int[array.Length]; Array.Copy(arrayLeft,0,result,0,arrayLeft.Length); result[arrayLeft.Length]=valueP; Array.Copy(arrayRight,0,result,arrayLeft.Length+1,arrayRight.Length); return result; }
果然自己还是菜,调试了半天才调通,不知道用LIST是不是更好点
 

 

posted on 2015-07-29 00:42  风灵ARCHER  阅读(205)  评论(0编辑  收藏  举报