下面由java入门进修栏目为人人引见java中怎样完成疾速排序,愿望这类算法排序能够协助到人人!
疾速排序的时候复杂度并不牢固,如果在最坏情况下(在一个底本逆向排序的数列中挑选第一个元素为基准元素)速率比较慢,到达 O(n^2)(和挑选排序一个效力),然则如果在比较抱负的情况下时候复杂度 O(nlogn)。
完成疾速排序的关键在于先在数组中挑选一个数字,接下来把数组中的数字分为两部分,比挑选的数字小的数字移动到数组的左侧,比挑选的数字大的数字移动到数组的右侧。这表现了分治法的头脑。
下面我们来完成这个函数:
int Partition(int data[],int length,int start,int end) { if(data == nullptr || length <= 0 || start < 0 || end >=length) throw new std::exception("Invalid Parameters"); int index = RandomInRange(start,end); Swap(&data[index],&data[end]); int small = start - 1; for(index = start; index < end; index++) { if(data[index]<data[end]) { ++small; if(small != index) Swap(&data[index],&data[small]); } } ++small; Swap(&data[small],&data[end]); return small; } int RandomInRange(int min, int max) { int random = rand()%(max - min +1) +min; return random; } int Swap(int *num1, int *num2) { int temp = *num1; *num1 = num2; *num2 = temp; }
上面代码中函数RandomInRange
用来生成一个在start和end之间的随机数,函数Swap用来交流两个数字。
下面我们用递返来完成疾速排序的代码:
void QuickSort(int data[], int length, int start, int end) { if(start == end) return; int index = Partition(data, length, start, end); if(index > start) QuickSort(data, length, start, index -1); if(index < end) QuickSort(data, length, index + 1, end); }
以上就是java中怎样完成疾速排序的细致内容,更多请关注ki4网别的相干文章!