[求助]谁帮我补全快速排序的代码 [现已经写全,不知道对不?]
// 谁帮我仔细看看 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 < n-1; i++)
{
if(s[i] < 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编辑过]
----------------解决方案--------------------------------------------------------