快速排序的一种实现方法
来源:互联网 发布:云联惠平台下载软件 编辑:程序博客网 时间:2024/05/21 00:53
#include "stdio.h"
#define MIN 3
void swap(int *p, int *q)
{
int temp = *p;
*p = *q;
*q = temp;
}
/*求中值*/
int median(int a[], int left, int right)
{
int i;
int midle = (left + right)/2;
if(a[left] > a[midle])
{
swap(&a[left],&a[midle]);
}
if(a[left] > a[right])
{
swap(&a[left],&a[right]);
}
if(a[midle] > a[right])
{
swap(&a[midle],&a[right]);
}
swap(&a[midle],&a[right - 1]);//将中值交换到数组倒数第二个位置(因为第一个、中间那个、最后一个已经是排过序的)
return a[right -1];
}
//insert sort algorithm
void insert_sort(int a[], int N)
{
int P = 0, i = 0, temp = 0,j =0;
for(P = 1; P < N; P++)
{
temp = a[P];
for(j = P; j > 0; j--)//j can not equal 0 to prevent from j-1 <0
{
if(a[j-1] > temp)
{
swap(&a[j-1],&a[j]);
}
}
}
}
void q_sort(int a[], int left, int right)
{
int i,j,mid,idx;
if(right - left +1 >= MIN)
{
mid = median(a,left,right);
i = left;
j = right - 1;
for(;;)
{
while(a[++i] < mid){}
while(a[--j] > mid){}
if(i < j)
{
swap(&a[i],&a[j]);
}
else
{
break;
}
}
swap(&a[i],&a[right -1]);
q_sort(a,left,i-1);
q_sort(a,i+1,right);
}
else
{
//插入排序
insert_sort(a+left,right - left +1);
}
}
void main ()
{
int i = 0;
int a[] = {8,1,4,9,2,3,0,5,6,7};
q_sort(a,0,9);
for(i = 0; i < 10; i++)
{
printf("the arr is :%d\n\r",*(a+i));
}
}
#define MIN 3
void swap(int *p, int *q)
{
int temp = *p;
*p = *q;
*q = temp;
}
/*求中值*/
int median(int a[], int left, int right)
{
int i;
int midle = (left + right)/2;
if(a[left] > a[midle])
{
swap(&a[left],&a[midle]);
}
if(a[left] > a[right])
{
swap(&a[left],&a[right]);
}
if(a[midle] > a[right])
{
swap(&a[midle],&a[right]);
}
swap(&a[midle],&a[right - 1]);//将中值交换到数组倒数第二个位置(因为第一个、中间那个、最后一个已经是排过序的)
return a[right -1];
}
//insert sort algorithm
void insert_sort(int a[], int N)
{
int P = 0, i = 0, temp = 0,j =0;
for(P = 1; P < N; P++)
{
temp = a[P];
for(j = P; j > 0; j--)//j can not equal 0 to prevent from j-1 <0
{
if(a[j-1] > temp)
{
swap(&a[j-1],&a[j]);
}
}
}
}
void q_sort(int a[], int left, int right)
{
int i,j,mid,idx;
if(right - left +1 >= MIN)
{
mid = median(a,left,right);
i = left;
j = right - 1;
for(;;)
{
while(a[++i] < mid){}
while(a[--j] > mid){}
if(i < j)
{
swap(&a[i],&a[j]);
}
else
{
break;
}
}
swap(&a[i],&a[right -1]);
q_sort(a,left,i-1);
q_sort(a,i+1,right);
}
else
{
//插入排序
insert_sort(a+left,right - left +1);
}
}
void main ()
{
int i = 0;
int a[] = {8,1,4,9,2,3,0,5,6,7};
q_sort(a,0,9);
for(i = 0; i < 10; i++)
{
printf("the arr is :%d\n\r",*(a+i));
}
}
0 0
- 快速排序的一种实现方法
- 快速排序的一种方法
- 快速排序的一种实现
- 快速排序的一种实现
- 快速排序,一种实现
- 快速排序的一种简单实现
- 快速排序算法的一种实现
- 快速排序的一种java实现
- 实数除法的一种快速实现方法
- 实数求根的一种快速实现方法
- 数据结构和算法学习系列之快速排序的Partition函数一种实现方法
- 递归排序的一种实现方法。
- 中文通讯录排序的一种实现方法
- python实现的一种排序方法
- 快速排序一种易于理解的方式实现
- 一种简单的用java实现快速排序(Quicksort)
- 一种简单的用java实现快速排序(Quicksort)
- 快速排序的一种写法
- Android调试时华为手机不打印logcat的问题
- C#调用外部程序结束后触发事件
- Tinywebserver-一个简易的web服务器
- PAT-B 1033. 旧键盘打字(20)
- hashCode和hash值
- 快速排序的一种实现方法
- C/C++学习之路之C及C++发展史及标准
- 日历组件demo
- 遍历二叉树
- Appium Appium 开发环境搭建 (1)--配置源码运行环境
- [swift]5.0控制语句
- Android LayoutInflater加载.xml文件原理分析
- 0305-HTML小白
- Android Activity的启动过程