[C][代码实例]整型数组二分排序
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h> void _qsort(void*, size_t, size_t);
void vswap(void*, void*, size_t); int main(void)
{
int int_1[] = {
85,9,32,64,12,7,9,51,2,63
};
size_t len = sizeof(int);
/*char int_1[] = {
85,9,32,64,12,7,9,51,2,63
};
size_t len = sizeof(char);*/ size_t count = sizeof(int_1)/len;
void *p_1 = malloc(count*len);
memcpy(p_1, int_1, count*len); _qsort(p_1, count, len);
printf("ALL Done-----------------\n"); size_t total_len = len * count;
int i = 0;
for (; i < total_len; ++i)
{
if(i%len != 0)
{
continue;
}
printf("%d,", *((int *)(p_1+i)));
//printf("%d\n", *((char *)(p_1+i)));
}
printf("\n"); }
void _qsort(void *p, size_t count, size_t len)
{
if(count == 2)
{
if( *((int*)(p)) > *((int*)(p+len)) )
{
vswap(p, p+len, len);
}
}
if(count > 2)
{
int mid_edge = (count + count%2)/2 - 1;
size_t total_len = len * count;
void *p_t = malloc(total_len);
int i = 0;
int index = 0;
int l_count = 0;
int r_count = 0;
for (; i < total_len; ++i)
{
if(i%len != 0)
{
continue;
}
if(i/len == mid_edge)
{
continue;
}
if( *((int*)(p+i)) <= *((int*)(p+(mid_edge*len))) )
{
memcpy(p_t+(index*len), p+i, len);
printf("l :%d, val :%d\n", index, *((int*)(p+i)));
index++;
l_count++;
}
}
//set mid
memcpy(p_t+(index*len), p+(mid_edge*len), len);
printf("mid_edge :%d, val :%d\n", index, *((int*)(p+(mid_edge*len))));
index++;
//set right
i = 0;
for (; i < total_len; ++i)
{
if(i%len != 0)
{
continue;
}
if(i/len == mid_edge)
{
continue;
}
if( *((int*)(p+i)) > *((int*)(p+(mid_edge*len))) )
{
memcpy(p_t+(index*len), p+i, len);
printf("r :%d, val :%d\n", index, *((int*)(p+i)));
index++;
r_count++;
}
} memcpy(p, p_t, total_len);
free(p_t);
//recursive
printf("%d\n", l_count);
printf("%d\n", r_count);
printf("Done-----------------\n");
_qsort(p, l_count, len);
_qsort(p+((l_count+1)*len), r_count, len);
}
} void vswap(void *p_1, void *p_2, size_t len)
{
void *p_t = malloc(len);
memcpy(p_t, p_1, len);
memcpy(p_1, p_2, len);
memcpy(p_2, p_t, len);
free(p_t);
}
[C][代码实例]整型数组二分排序的更多相关文章
- java 整型数组基本排序,冒泡,快速选择,插入,归并
在学java泛型,于是把排序拿来练练手了 import java.util.Arrays; public class GenericArraySort { public static void mai ...
- Java整型数组的最大长度到底有多长?
Java整型数组的最大长度到底有多长? 今天上网查了一下,各种说法都有,这个问题似乎总困扰我们Java初学者,无奈,只好自己试了一下,以下是我的测试代码,如果有错误,还望不吝赐教! 使用eclipse ...
- Android jni 编程3(对基本类型一维整型数组的操作)总结版
主要学习资料:黑马程序员的NDK方法使用(生产类库so) jni编程指南中文版(已上传至博客园) 博主文章(它使用的是VS和eclipse联合开发):http://www.c ...
- Android jni 编程2(对基本类型一维整型数组的操作)
参考教程和这位博主的对一维数组的处理,主要包括以下三种类型: //传入一维数组,无返回值 public native void arrayEncode(int[] arr); //传一个一维数组和数组 ...
- 剑指offer40:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
1 题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 2 思路和方法 (1)异或:除了有两个数字只出现了一次,其他数字都出现了两次.异或运算中,任 ...
- 057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和
057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和 本文知识点:求整型数组的数组元素的元素值累加和 案例:求整型数 ...
- 实验12:Problem H: 整型数组运算符重载
Home Web Board ProblemSet Standing Status Statistics Problem H: 整型数组运算符重载 Problem H: 整型数组运算符重载 Tim ...
- c# 计算一个整型数组的平均
一个整型数组的平均: class Program { static void Main(string[] args) { ,,,,,,,,,}; double avg= GetAvg(array); ...
- Android jni 编程4(对基本类型二维整型数组的操作)
Android jni 编程 对于整型二维数组操作: 类型一:传入二维整型数组,返回一个整型值 类型二:传入二维整型数组,返回一个二维整型数组 声明方法: private native int Sum ...
随机推荐
- MySQL Connector 编程
MySQL Connector 是MySQL数据库客户端编程的接口, 它提供了通过网络访问数据库的接口, 这些功能在动态链接库(.dll, .so)或者静态对象库(.lib, .a)中实现. 使用时必 ...
- luogu 4377 Talent show 01分数规划+背包dp
01分数规划+背包dp 将分式下面的部分向右边挪过去,通过二分答案验证, 注意二分答案中如果验证的mid是int那么l=mid+1,r=mid-1,double类型中r=mid,l=mid; 背包dp ...
- org.apache.jasper.JasperException: Unable to convert string
最佳实践 不要使用idea生成的模板,头文件宁愿不要省事,除非知道有什么副作用. <!--<!DOCTYPE web-app PUBLIC--> <!--"-//Su ...
- 20155324 2016-2017-2 《Java程序设计》第1周学习总结
20155324 2016-2017-2 <Java程序设计>第1周学习总结 教材学习内容总结 1.1.1 前世今生 Java最早是Sun公司绿色项目Green Project中撰写Sta ...
- request和reponse
- Docker 添加环境系统文件配置
在 docker 启动文件添加默认环境系统配置 " /etc/default/docker ": 添加 Environment File 配置: # vi /usr/lib/sy ...
- 通过dbutil操作数据库
dbutil操作数据库工具类 步骤 导入jar包 c3p0-0.9.1.2.jar commons-dbutils-1.6.jar mysql-connector-ja ...
- new、override关键字
1.如果我想彻底覆盖父类的方法,此时可以使用override .假有classB继承自classA,代码如下: public class B : A { public bool _flag; publ ...
- Path for IClasspathEntry must be absolute:
关掉eclipse, 删除workspace工作目录下面的.metadata文件,看不到.metadata文件就 "ctril + H" 就可以看到了.然后重新打开eclipse, ...
- Ajax原生请求和java对象转成json
\黑马程序员_超全面的JavaWeb视频教程vedio\黑马程序员_超全面的JavaWeb教程-源码笔记\JavaWeb视频教程_day23-资料源码\ajax_code\day23_3 本代码中有模 ...