编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛  
 
全能 ASP / PHP / ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
发新话题
打印

[求助]谁帮我补全快速排序的代码 [现已经写全,不知道对不?]

[求助]谁帮我补全快速排序的代码 [现已经写全,不知道对不?]

// 谁帮我仔细看看 void QuickSort(int a[], int left, int right) // 这个函数写对没?请大家不要以运行该程序答复,从算法上看看,多谢! #include <iostream> using namespace std; void swap(int *a,int *b) { int temp; temp = *a; *a = *b; *b = temp; } void QuickSort(int a[], int left, int right) { int i = left, j = right, pivot; if(i < j) { while (i < j) { while (a[i] <= a[j]) { j--; } if (i < j) swap(&a[i], &a[j]); while (a[j] >= a[i]) { i++; } if (i < j) swap(&a[i], &a[j]); } pivot = i; QuickSort(a, left, pivot-1); QuickSort(a, pivot+1, right); } } void main() { int Array[7] = {10, 5, 4, 6, 7, 20, 30}; QuickSort(Array, 0, 6); for(int i=0; i<7; i++) { cout << Array[i] << " "; } cout << endl; }

TOP

貌似没错。不过这样动态的阀值有没有意义啊?是不是得到的效果更好?
我试了几组,感觉都是很快完成了,如果能够完成时跳过后面不必要的递归就好了!
Have you visit acm.tongji.edu.cn lately?

TOP

http://www.programfan.com/club/showbbs.asp?id=65292 1楼说的有道理,我咋没看出来呢:)嘿嘿。
Have you visit acm.tongji.edu.cn lately?

TOP

这是我写的.你看看.

int *qsort ( int *s ,int n)
{
   int c;
   int i;
   int last = 0;
   c= rand( ) % n;
   swap( s, 0, c );
   for( i = 1; i &lt; n-1; i++)
    {
      if(s[i] &lt; s[0])
         swap(s, last + 1, i );
         last++;
     }
    swap( s, 0, last );
    qsort( *s, last );
    qsort( int  *( s + last + 1 ), n - last - 1 );
}

void swap ( int *s, int i; int j )
{
   int temp;
   temp = *(s+i);
   *( s + i ) = *( s + j );
   *( s + j ) = temp;
}
        



TOP

快速排序是给数定位,时间复杂度是n log 2  N
而且有个特点, 如果数越乱 ,数越多, 其他算法是难以与其比拟的
最坏的情况,这些数已经有序不必排了。

[此贴子已经被作者于2005-3-13 0:57:49编辑过]


人生最大的苦痛是梦醒了无路可走,做梦的人是 幸福的; 倘没有看看出可走的路,最要紧的是不要去 惊醒他。

TOP

发新话题