设为首页 加入收藏

TOP

C语言实现快速排序(二)
2015-11-10 13:46:15 来源: 作者: 【 】 浏览:36
Tags:语言 实现 快速 排序
于p的;


右边则是大于p的;


符合我们的设想;


为了把整个数组正确排序,我们需要分别又对两部分重复一遍刚才的操作;


好,我们递归的调用函数,并且把数组的两部分元素传递到函数中;


void quick_sort( int *a, int n)
{
? ? int i, j, p, tmp;
? ? if (n < 2)? return;


? ? p = a[n / 2];? // Get the middle element as pivot ..


? ? for ( i = 0, j = n -1;; i++, j--) {
? ? ? ? while (a[i] < p)
? ? ? ? ? ? i++;
? ? ? ? while (p < a[j])
? ? ? ? ? ? j--;
? ? ? ? if ( i >= j)
? ? ? ? ? ? break;
? ? ? ? tmp = a[i]; a[i] = a[j]; a[j] = tmp;? ? //swap both ..
? ? }?


? ? quick_sort( a, i);
? ? quick_sort( a + i, n - i);
}


注意:


第一个递归调用处理数组的前部分,a对应的是数组的首地址,i是指对应的元素个数;


第二个递归调用处理数组后部分,a + i指的当然是首地址加偏移地址,如果你对偏移地址有问题的话,应该看看计算机寻址方式的资料啦;


接下来看运行结果:



最后,我们把所有代码附上:


#include


void quick_sort( int *a, int n)
{
? ? int i, j, p, tmp;
? ? if (n < 2)? return;


? ? p = a[n / 2];? // Get the middle element as pivot ..


? ? for ( i = 0, j = n -1;; i++, j--) {
? ? ? ? while (a[i] < p)
? ? ? ? ? ? i++;
? ? ? ? while (p < a[j])
? ? ? ? ? ? j--;
? ? ? ? if ( i >= j)
? ? ? ? ? ? break;
? ? ? ? tmp = a[i]; a[i] = a[j]; a[j] = tmp;? ? //swap both ..
? ? }?


? ? quick_sort( a, i);
? ? quick_sort( a + i, n - i);
}



int main(void)
{
? ? int a[] = { 2, 5, 7, 3, -1, 1, 4};
? ? int n = sizeof a /sizeof a[0];
? ? int i;
? ? for (i = 0; i < n; i++)
? ? ? ? printf("%d%s", a[i], i == n -1 ? "\n" : " ");
? ? quick_sort(a, n);
? ? for (i = 0; i < n; i++)
? ? ? ? printf("%d%s", a[i], i == n -1 ? "\n" : " ");
? ?
? ? return 0;
}


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言实现冒泡排序-整数排序 下一篇JavaScript设计模式之观察者模式..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: