[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 ...
随机推荐
- HTTP method constants
HTTP method constants ngx.HTTP_GET ngx.HTTP_HEAD ngx.HTTP_PUT ngx.HTTP_POST ngx.HTTP_DELETE ngx.HTTP ...
- [设计模式] javascript 之 命令模式
模式定义: [定义]: 将一个请求封装成一个对象,使得你用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能. 组成: 调用者(Invoker),命令请求(Comman ...
- termios结构体的内容
一.结构体成员 struct termios { tcflag_t c_iflag; tcflag_t c_oflag; tcflag_t c_cflag; tcflag_t c_lflag; cc_ ...
- 二十一、Linux 进程与信号---进程查看和进程状态、进程调度和进程状态变化、进程标识
21.1 进程查看和进程状态 21.1.1 ps 指令 ps 指令通常可以查看到进程的 ID.进程的用户 ID.进程状态和进程的 Command ps:查看当前用户启动的进程 ps -ef:详细查看后 ...
- 【SRM-05 B】无题?
Description 有一个拥有n个城市的国家.这个国家由n-1条边连接起来.有一天国家发生叛乱.叛军已占领了一些城市.如果叛军占领的城市中,存在两个城市之间有边直接相连,则称这种情况是坏的.现在并 ...
- 新闻类App顶部菜单栏封装
概述 最近有一个需求,类似今日头条顶部的菜单栏.唯一区别是需要带可移动的下划线.网上查找资料,发现解决方案大部分是用UIScrollView实现.下方VC控制用UICollectionView.这样可 ...
- 嵌入式-迅为iTOP-4418/6818开发板编译Android镜像技术分享
迅为是基于Ubuntu12.04.2 平台做开发,所有的配置和编译脚本也是基于此平台.如果你对Linux 和Android 开发很熟悉,相信你会根据错误提示逐步找到原因并解决,错误提示一般是选用的平台 ...
- Python 13 简单项目-堡垒机
本节内容 项目实战:运维堡垒机开发 前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多人觉得,堡垒机就是跳板机,其实这个认识是不全面的,跳板功 ...
- Ajax——从服务器获取各种文件
ajax.js内容 function ajax(url,fnWin,fnFaild){ //1.创建ajax对象 var xhr = window.XMLHttpRequest ? new XMLHt ...
- linux上安装Docker(非常简单的安装方法)
Docker的三大核心概念:镜像.容器.仓库 镜像:类似虚拟机的镜像.用俗话说就是安装文件. 容器:类似一个轻量级的沙箱,容器是从镜像创建应用运行实例, 可以将其启动.开始.停止.删除.而这些容器都是 ...