第五题:快速排序(Quicksort)
Posted 蚂蚁伙记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第五题:快速排序(Quicksort)相关的知识,希望对你有一定的参考价值。
快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
java 编写:
public static void quickSort(int[] list,int left, int right){
int i=left,j=right;
int iTemp=list[left];
while(i<j){
//由右向左扫描找出比中间小的数 并交换
while(i<j){
if(list[j]<iTemp){
list[j] +=list[i];
list[i]=list[j]-list[i];
list[j]=list[j]-list[i];
i++;//前移
break;
}
j--;//后移
}
//由左向右扫描找出比中间大的数 并交换
while(i<j){
if(list[i]>iTemp){
list[j] +=list[i];
list[i]=list[j]-list[i];
list[j]=list[j]-list[i];
j--;//后移
break;
}
i++;//前移
}
}
if(i>left) quickSort(list,left,i-1);
if(j<right) quickSort(list,i+1,right);
}
测试:
int sortList[] = {6,3,8,7,2,4,9,1,0,5};
quickSort(sortList,0,sortList.length-1);
for(int i=0;i<sortList.length;i++){
System.out.printf("%d,",sortList[i]);
}
输出结果:0,1,2,3,4,5,6,7,8,9
c++ 编写:
void quickSort(int list[],int left, int right){
int i=left,j=right;
int iTemp=list[left];
while(i<j){
//由右向左扫描找出比中间小的数 并交换
while(i<j){
if(list[j]<iTemp){
list[j] +=list[i];
list[i]=list[j]-list[i];
list[j]=list[j]-list[i];
i++;//前移
break;
}
j--;//后移
}
//由左向右扫描找出比中间大的数 并交换
while(i<j){
if(list[i]>iTemp){
list[j] +=list[i];
list[i]=list[j]-list[i];
list[j]=list[j]-list[i];
j--;//后移
break;
}
i++;//前移
}
}
if(i>left) quickSort(list,left,i-1);
if(j<right) quickSort(list,i+1,right);
}
测试:
int sortList[10]={6,3,8,7,2,4,9,1,0,5};
int len=sizeof(sortList) / sizeof(int);
quickSort(sortList,0,len-1);
for(int i=0;i<len+1;i++){
printf("%d,",sortList[i]);
}
输出结果:0,1,2,3,4,5,6,7,8,9
python 编写:
def quickSort(list,left,right):
i=left
j=right
iTemp = list[left]
while(i<j):
while(i<j):
if list[j]<iTemp:
list[j] +=list[i]
list[i] = list[j] - list[i]
list[j] = list[j] - list[i]
i=i+1
break
j=j-1
while(i<j):
if list[i] > iTemp:
list[j] +=list[i]
list[i] = list[j] - list[i]
list[j] = list[j] - list[i]
j=j-1
break
i = i + 1
if (i > left):
quickSort(list, left, i-1);
if (j < right):
quickSort(list, i+1, right);
测试:
sortList=[6,3,8,7,2,4,9,1,0,5]
quickSort(sortList,0,len(sortList)-1)
for i in range(0,len(sortList)):
print(sortList[i],end=',')
输出结果:0,1,2,3,4,5,6,7,8,9,
今天就到这了,明天继续,希望可以坚下来!加油 ! KONG!
以上是关于第五题:快速排序(Quicksort)的主要内容,如果未能解决你的问题,请参考以下文章