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

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; } else break; } 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; } else break; } } } } staticpublicvoidinsertsort(int[]array,intlength)//直接插入排序 { inti,j,temp; for(i=1;i temp) j=0; else j=1; break; } elseif(low==high-1) { if(array[j+1] temp) { high=j; j=low+(high-low)/2; } else break; } 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;i array[i+1]) { temp=array[i]; array[i]=array[i+1]; array[i+1]=temp; } } j--; } } staticpublicvoidfastsort(int[]array,intbegin,intend)//快速排序 { if(begin<0||end<0||begin>end) return; intleft=begin,right=end,temp;//经典的快排 temp=array[left]; while(right!=left) { while(temp left) 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; } }//for x=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 } } }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值