c#中快速排序的方法(转载)

来源:互联网 发布:京东 研发 知乎 编辑:程序博客网 时间:2024/05/16 07:21
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespacec_sharp_sort{classProgram{staticvoidMain(string[]args){int[]test7={21,13,321,231,43,7,65,18,48,6};heapsort(test7,0,9);//堆排序foreach(intaintest7)Console.Write(a.ToString().PadRight(4));Console.WriteLine();int[]test6={21,13,321,231,43,7,65,18,48,6};radixsort(test6,0,9,2);//基数排序(第4个参数是数组中最大数的10的最大次瞑)foreach(intaintest6)Console.Write(a.ToString().PadRight(4));Console.WriteLine();int[]test0={21,13,321,231,43,7,65,18,48,6};insertsort(test0,10);//插入排序foreach(intaintest0)Console.Write(a.ToString().PadRight(4));Console.WriteLine();int[]test1={21,13,321,231,43,7,65,18,48,6};newinsertsort(test1,10);//折半插入排序foreach(intaintest1)Console.Write(a.ToString().PadRight(4));Console.WriteLine();int[]test2={21,13,321,231,43,7,65,18,48,6};shellsort(test2,10);//希尔排序foreach(intaintest2)Console.Write(a.ToString().PadRight(4));Console.WriteLine();int[]test3={21,13,321,231,43,7,65,18,48,6};paopaosort(test3,10);//冒泡排序foreach(intaintest3)Console.Write(a.ToString().PadRight(4));Console.WriteLine();int[]test4={21,13,321,231,43,7,65,18,48,6};fastsort(test4,0,9);//快速排序foreach(intaintest4)Console.Write(a.ToString().PadRight(4));Console.WriteLine();int[]test5={21,13,321,231,43,7,65,18,48,6};selectsort(test5,10);//选择排序foreach(intaintest5)Console.Write(a.ToString().PadRight(4));Console.WriteLine();Console.Read();}staticpublicvoidheapsort(int[]array,intbegin,intend)//堆排序{inttemp,i,j,length;for(i=(end-begin)/2;i>=begin;i--)//建初堆{j=i;while(j<=(end-begin)/2){if((2*j+2)<=end){if(array[2*j+1]>array[2*j+2]&&array[2*j+1]>array[j]){temp=array[2*j+1];array[2*j+1]=array[j];array[j]=temp;j=2*j+1;}elseif(array[2*j+1]array[j]){temp=array[j];array[j]=array[2*j+2];array[2*j+2]=temp;j=2*j+2;}elsebreak;}else{if(array[2*j+1]>array[j]){temp=array[2*j+1];array[2*j+1]=array[j];array[j]=temp;j=2*j+1;}break;}}}for(length=end;length>begin;length--)//首尾交换{temp=array[length];array[length]=array[0];array[0]=temp;j=0;while(j<(length-begin-1)/2)//调整堆{if((2*j+2)<=end){if(array[2*j+1]>array[2*j+2]&&array[2*j+1]>array[j]){temp=array[2*j+1];array[2*j+1]=array[j];array[j]=temp;j=2*j+1;}elseif(array[2*j+1]array[j]){temp=array[j];array[j]=array[2*j+2];array[2*j+2]=temp;j=2*j+2;}elsebreak;}}}}staticpublicvoidinsertsort(int[]array,intlength)//直接插入排序{inti,j,temp;for(i=1;itemp){high=j;j=low+(high-low)/2;}elsebreak;}for(intn=i-1;n>=j;n--)array[n+1]=array[n];array[j]=temp;}}staticpublicvoidshellsort(int[]array,intlength)//希尔排序(基于直接插入排序){inti,j,k,delta=length/2,temp;while(delta!=0)//delte为分组递增值{for(i=0;iend)return;intleft=begin,right=end,temp;//经典的快排temp=array[left];while(right!=left){while(templeft)right--;if(right>left){array[left]=array[right];left++;}while(temp>array[left]&&right>left)left++;if(right>left){array[right]=array[left];right--;}}array[right]=temp;fastsort(array,right+1,end);fastsort(array,begin,right-1);}staticpublicvoidselectsort(int[]array,intlength)//选择排序{inti=0,j,min,temp_array,temp;while(i[]queue=newQueue[10];//利用泛型队列来存储筛选分组queue[0]=newQueue();queue[1]=newQueue();queue[2]=newQueue();queue[3]=newQueue();queue[4]=newQueue();queue[5]=newQueue();queue[6]=newQueue();queue[7]=newQueue();queue[8]=newQueue();queue[9]=newQueue();int[]nn={0,0,0,0,0,0,0,0,0,0};intx,p=pow,n,i;while(p>=0){for(i=begin;i<=last;i++){intsum=array[i];n=pow-p;while(n!=0){sum=sum/10;n--;}sum=sum%10;switch(sum){case0:queue[0].Enqueue(array[i]);nn[0]++;break;case1:queue[1].Enqueue(array[i]);nn[1]++;break;case2:queue[2].Enqueue(array[i]);nn[2]++;break;case3:queue[3].Enqueue(array[i]);nn[3]++;break;case4:queue[4].Enqueue(array[i]);nn[4]++;break;case5:queue[5].Enqueue(array[i]);nn[5]++;break;case6:queue[6].Enqueue(array[i]);nn[6]++;break;case7:queue[7].Enqueue(array[i]);nn[7]++;break;case8:queue[8].Enqueue(array[i]);nn[8]++;break;case9:queue[9].Enqueue(array[i]);nn[9]++;break;}}//forx=n=0;for(i=0;i<10;i++){n=n+x;x=nn[i];while(nn[i]!=0){array[n+x-nn[i]]=queue[i].Peek();queue[i].Dequeue();nn[i]--;}}p--;}//while}}}
原创粉丝点击