当前位置: 代码迷 >> C语言 >> [求助]谁帮我补全快速排序的代码 [现已经写全,不知道对不?]
  详细解决方案

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

热度:259   发布时间:2005-03-12 15:17:00.0
[求助]谁帮我补全快速排序的代码 [现已经写全,不知道对不?]
// 谁帮我仔细看看 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; }
搜索更多相关的解决方案: 代码  

----------------解决方案--------------------------------------------------------
貌似没错。不过这样动态的阀值有没有意义啊?是不是得到的效果更好?
我试了几组,感觉都是很快完成了,如果能够完成时跳过后面不必要的递归就好了!
----------------解决方案--------------------------------------------------------
http://www.programfan.com/club/showbbs.asp?id=65292 1楼说的有道理,我咋没看出来呢:)嘿嘿。
----------------解决方案--------------------------------------------------------
这是我写的.你看看.

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;
}
        




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

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



----------------解决方案--------------------------------------------------------
  相关解决方案