读书人

求解快速排序算法的流程。该怎么处

发布时间: 2012-08-17 02:08:34 作者: rapoo

求解——快速排序算法的流程。。

快速排序

很久之前我看到的第一次的快速排序算法是:

首看:

C/C++ code
    typedef int KeyType;    typedef struct     {        KeyType key;        InfoType data;    } RecType;    void QuikSort ( RecType R[], int s, int t )    {        int i = s, j = t;        RecType tmp;        if ( s < t )        {            tmp = R[s];            while ( i != j )            {                while ( j > i && R[j].key > tmp.key )                    j--;                R[i] = R[j];                while ( i < j && R[i].key < tmp.key )                    i++;                R[j] = R[i];            }            R[i] = tmp;            QuikSort( R, s, i-1 );            QuikSort( R, i+1, t );        }    }


而它的流程是我所熟悉的,但是以下这两个快速排序算法的流程好像与上一个算法的流程不一样??

第一个:
C/C++ code
   /* swap:  interchange v[i] and v[j] */   void swap(int v[], int i, int j)   {       int temp;       temp = v[i];       v[i] = v[j];       v[j] = temp;   }   /* qsort:  sort v[left]...v[right] into increasing order */   void qsort(int v[], int left, int right)   {       int i, last;       void swap(int v[], int i, int j);       if (left >= right) /* do nothing if array contains */           return;        /* fewer than two elements */       swap(v, left, (left + right)/2); /* move partition elem */       last = left;                     /* to v[0] */       for (i = left + 1; i <= right; i++)  /* partition */           if (v[i] < v[left])               swap(v, ++last, i);       swap(v, left, last);            /* restore partition  elem */       qsort(v, left, last-1);       qsort(v, last+1, right);   }


第二个:
C/C++ code
   /* swap:  interchange v[i] and v[j] */   void swap(char *v[], int i, int j)   {       char *temp;       temp = v[i];       v[i] = v[j];       v[j] = temp;   }   /* qsort:  sort v[left]...v[right] into increasing order */   void qsort(char *v[], int left, int right)   {       int i, last;       void swap(char *v[], int i, int j);       if (left >= right)  /* do nothing if array contains */           return;         /* fewer than two elements */       swap(v, left, (left + right)/2);       last = left;       for (i = left+1; i <= right; i++)           if (strcmp(v[i], v[left]) < 0)               swap(v, ++last, i);       swap(v, left, last);       qsort(v, left, last-1);       qsort(v, last+1, right);   }


“首看”,“第一个”,“第二个”,这三个快速排序算法我有以下不明白之处:

1、“首看”的流程是不是与“第一个”和“第二个”的流程不一样?如果一样, 以“第一个”为例写出具体流程。
如果不一样,也 以“第一个”为例写出具体流程。
2、“第一个”与“第二个”有什么不同?具体说说。

~~~~




[解决办法]
其实思想都差不多,在数组中设置一个标准数,将小于该数的放置在数的左边,大于该数的放置在数的右边。
[解决办法]
探讨
引用:
引用:
其实思想都差不多,在数组中设置一个标准数,将小于该数的放置在数的左边,大于该数的放置在数的右边。


嗯,这个思想我在“首看”那段代码可以看出思路,
但是,另外两个的算法思路我不太懂。


简单来说,我就想弄懂“第一个”算法走向。。。

[解决办法]
C/C++ code
void quicksort(int a[],int len){    for(int j=1;j<len;j++){        int i=j;        while(i>=0&&a[i-1]>a[i]){            int temp;            temp=a[i-1];            a[i-1]=a[i];            a[i]=temp;            i--;        }    }}
------解决方案--------------------


探讨
C/C++ code


void quicksort(int a[],int len){
for(int j=1;j<len;j++){
int i=j;
while(i>=0&&a[i-1]>a[i]){
int temp;
temp=a[i-1];
……

[解决办法]

http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express
右边Visual C++ 2010 Express下面的Select language...下拉选‘简体中文’,再按Install Now按钮

再参考
C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\qsort.c

[解决办法]
探讨
引用:
C/C++ code

void quicksort(int a[],int len){
for(int j=1;j<len;j++){
int i=j;
while(i>=0&&a[i-1]>a[i]){
int temp;
temp=a[i-1];
a……


这也是快速排序吗??

[解决办法]
探讨
引用:

http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express
右边Visual C++ 2010 Express下面的Select language...下拉选‘简体中文’,再按Install Now按钮

再参考
C:\Program Files\……

[解决办法]
探讨
引用:
引用:
其实思想都差不多,在数组中设置一个标准数,将小于该数的放置在数的左边,大于该数的放置在数的右边。


嗯,这个思想我在“首看”那段代码可以看出思路,
但是,另外两个的算法思路我不太懂。


我想知道“第一个”快速排序算法如何实现1楼所说的流程,
就这么简单!!~~~

[解决办法]
探讨

引用:
引用:
引用:
引用:
其实思想都差不多,在数组中设置一个标准数,将小于该数的放置在数的左边,大于该数的放置在数的右边。



流程都是一样的,通过确定“枢轴”的位置来完成排序。



请问,这里的“枢轴”指的是算法哪里呢。。
具体一点,最好以“第一个”算法为例。

[解决办法]
自己在IDE上调试看看

读书人网 >C语言

热点推荐