您的位置:首页 > 其它

排序算法总结

2016-07-13 11:27 295 查看
1、冒泡排序

//快速排序

int median3(int A[], int left, int right)
{
//取主元:取首个,中间,最后元素的中位数
int mid = (left + right) / 2;
if (A[left] > A[mid])swap(&A[left], &A[mid]);
if (A[left] > A[right-1])swap(&A[left], &A[right-1]);
if (A[mid] > A[right-1])swap(&A[mid], &A[right-1]);
//同时将主元藏在倒数第二个位置上,只需考虑个[left+1,right-3];
swap(&A[mid], &A[right - 2]);
return A[right - 2];
}

void quick_sort(int A[], int left, int right)
{
int pivot = median3(A, left, right);

int i = left, j = right - 2;
for (;;)
{
while (A[++i] < pivot);
while (A[--j] > pivot);

if (i < j)swap(&A[i], &A[j]);
else break;
}

swap(&A[i], &A[right - 2]);//将pivot交换至正确位置
quick_sort(A, left, i - 1);
quick_sort(A, i + 1, right);

}

void quickSort(int A[], int n)
{
quick_sort(A, 0, n);
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: