第五题:快速排序(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)的主要内容,如果未能解决你的问题,请参考以下文章

快速排序(QuickSort),归并排序(MergeSort),堆排序(HeapSort)典型C++代码实现总结

快速排序 QuickSort

快速排序(QuickSort)的Javascript实现

快速排序法QuickSort

快速排序

快速排序--quicksort