[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 ...
随机推荐
- 关于PHP的加载类操作以及其他两种魔术方法应用
<?php 加载类//include("./Ren.class.php");//include "./Ren.class.php";include_onc ...
- web渗透测试基本步骤
基本常见步骤: 一 .信息收集 要检测一个站首先应先收集信息如whois信息.网站真实IP.旁注.C段网站.服务器系统版本.容器版本.程序版本.数据库类型.二级域名.防火墙.维护者信息有哪些等等 ...
- 迅为IMX6开发板支持全网通4G模块丨GPS模块丨WIFI蓝牙丨千兆以太网
迅为i.MX6开发板丨迅为i.MX6Q开发板丨四核imx6开发板丨Cortec-A9开发板丨资料介绍: 特点: 处理器:Freescale Cortex-A9四核i.MX6Q主频1GHz 核心板配置: ...
- 嵌入式开发 迅为4418开发板Qt移植移动4G模块第一部分
本文转自迅为论坛:http://topeetboard.com 了解更多:https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-7744162139 ...
- Karel版本的nnet1
除了chain,nnet1, nnet2, nnet3训练时调整转移模型,chain模型使用类似与MMI的训练准则 概要 Karel Vesely的nnet1用到以下技术: 每一层进行预训练,基于RB ...
- 《第一行代码-李兴华》-10.3 System类
10.3 System类 视频地址:System类 /** * * 统计某项操作执行时间 * */ long start = System.currentTimeMillis();//返回以毫秒为单位 ...
- printf是在libc库中么?
libc中果然有很多的函数,使用nm看了一下,里面竟然还有reboot函数,汗! 使用grep,可以看到各种 printf 也都在这里头. objdump是看函数的地址与函数名对应的,虽然也能证明pr ...
- Javascript - ExtJs - 常用方法和属性
常用方法和属性(Common methods and attributes) ExtJs中的对象 Ext.Component Ext组件对象,表示一个可渲染的组件. Ext.dom.Element E ...
- 阿里云IoT物联网平台入门教程
参考链接:https://www.geek-workshop.com/thread-37883-1-1.html
- PL/SQL 加字段 修改数据库之后 之后记得保存脚本