//
// main.c
// 冒泡排序
//
// Created by xiaomage on 15/6/10.
// Copyright (c) 2015年 xiaomage. All rights reserved.
// #include <stdio.h> int main(int argc, const char * argv[]) {
/*
思路:
1.先分析如何比较
2.找出比较的规律比较完一次之后第二次比较会少一次
3.打印倒三角
4.打印需要比较的角标
5.比较并交换位置
6.将常量替换为变量(length)
*/
// 已知一个无序的数组, 里面有5个元素, 要求对数组进行排序
int nums[] = {, , , , , };
int length = sizeof(nums) / sizeof(nums[]);
for (int i = ; i < length; i++) {
printf("nums[%i] = %i\n", i, nums[i]);
}
for (int i = ; i < length - ; i++) {
for (int j = ; j < length - - i; j++) {
// printf("*");
// printf("%i == %i\n", j, j+1);
if (nums[j] > nums[j + ]) {
int temp = nums[j];
nums[j] = nums[j + ];
nums[j + ] = temp;
}
}
// printf("\n");
}
printf("----------\n");
for (int i = ; i < length; i++) {
printf("nums[%i] = %i\n", i, nums[i]);
}
return ;
}
//
// main.c
// 选择-冒泡排序优化
//
// Created by xiaomage on 15/6/10.
// Copyright (c) 2015年 xiaomage. All rights reserved.
// #include <stdio.h> void selectSort(int nums[], int length);
void printArray(int nums[], int length);
//void swap(int v1, int v2);
void swap(int nums[], int i, int j);
void bubbleSort(int nums[], int length); int main(int argc, const char * argv[])
{
// 已知一个无序的数组, 里面有5个元素, 要求对数组进行排序
int nums[] = {, , , , , , , };
int length = sizeof(nums) / sizeof(nums[]); printArray(nums, length);
// selectSort(nums, length);
bubbleSort(nums, length); printf("----------------\n");
printArray(nums, length); return ;
} // 遍历数组
void printArray(int nums[], int length)
{
for (int i = ; i < length; i++) {
printf("nums[%i] = %i\n", i, nums[i]);
}
} void bubbleSort(int nums[], int length)
{
for (int i = ; i < length - ; i++) {
for (int j = ; j < length - - i; j++) {
if (nums[j] > nums[j + ]) {
swap(nums, j, j+);
}
}
}
} // 选择排序
void selectSort(int nums[], int length)
{
for (int i = ; i < length - ; i++) {
for (int j = i+; j < length; j++) {
if (nums[i] > nums[j]) {
/*
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
*/
// swap(nums[i], nums[j]);
swap(nums, i, j);
}
}
} } // 基本数据类型作为函数的参数, 是值传递, 在函数中修改形参不会影响实参的值
/*
void swap(int v1, int v2)
{
int temp = v1;
v1 = v2;
v2 = temp;
}
*/
// 交换两个数的值
void swap(int nums[], int i, int j)
{
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
//
// main.c
// 折半查找
//
// Created by xiaomage on 15/6/10.
// Copyright (c) 2015年 xiaomage. All rights reserved.
// #include <stdio.h>
#include <time.h> int findKey(int nums[], int key, int length);
int findKey2(int nums[], int length, int key);
int findKey3(int nums[], int length, int key); int main(int argc, const char * argv[]) {
// 现在已知一个有序的数组, 和一个key. 要求从数组中找到key对应的索引的位置
// 对该方法进行封装, 要求找到就返回对应的索引, 找不到就返回-1
int nums[] = {, , , , , [] = };
int key = ;
int length = sizeof(nums) / sizeof(nums[]); // 消耗了多少1181毫秒
clock_t startTime = clock();
int index = findKey(nums, key, length);
clock_t endTime = clock();
printf("消耗了多少%lu毫秒\n", endTime - startTime);
printf("index = %i\n", index); // 消耗了多少1毫秒
clock_t startTime = clock();
// int index = findKey2(nums, length, key);
// 消耗了多少2毫秒
int index = findKey3(nums, length, key);
clock_t endTime = clock();
printf("消耗了多少%lu毫秒\n", endTime - startTime);
printf("index = %i\n", index); return ;
} int findKey3(int nums[], int length, int key)
{
int min, max, mid;
min = ;
max = length - ; // 只要还在我们的范围内就需要查找
while (min <= max) {
// 计算中间值
mid = (min + max) / ;
if (key > nums[mid]) {
min = mid + ;
}else if (key < nums[mid])
{
max = mid - ;
}else
{
return mid;
} }
return -;
} int findKey2(int nums[], int length, int key)
{
int min, max, mid;
min = ;
max = length - ;
mid = (min + max) / ; while (key != nums[mid]) {
// 判断如果要找的值, 大于了取出的值, 那么min要改变
if (key > nums[mid]) {
min = mid + ;
// 判断如果要找的值, 小雨了取出的值, 那么max要改变
}else if (key < nums[mid])
{
max = mid - ;
} // 超出范围, 数组中没有需要查找的值
if (min > max) {
return -;
}
// 每次改变完min和max都需要重新计算mid
mid = (min + max) / ;
}
printf("aaaaaa\n"); return mid; } int findKey(int nums[], int key, int length)
{
for (int i = ; i < length; i++) {
if (nums[i] == key) {
printf("%i\n", i);
return i;
}
}
return -;
}
//
// main.c
// 折半查找练习
//
// Created by xiaomage on 15/6/10.
// Copyright (c) 2015年 xiaomage. All rights reserved.
// #include <stdio.h> int insertValue(int nums[], int length, int key); int main(int argc, const char * argv[]) {
// 现有一个有序的数组, 要求给定一个数字, 将该数字插入到数组中, 还要保证数组是有序的
// 其实就是找到需要插入数字的位置
// 其实这个位置就是min的位置
/*
min = 0
max = 4
mid = 2
*/
// 0 1 2 3 4 5
int nums[] = {, , , ,};
int key = ;
int length = sizeof(nums) / sizeof(nums[]);
printf("需要插入的位置是%i\n", insertValue(nums, length, key)); return ;
} int insertValue(int nums[], int length, int key)
{
int min , max, mid;
min = ;// 1 2
max = length - ;// 4 1
while (min <= max) {
mid = (min + max) / ; // 2 0 1
if (key > nums[mid]) {
min = mid + ;
}else if (key < nums[mid])
{
max = mid - ;
}
}
return min;
}
//
// main.c
// 进制查表法
//
// Created by xiaomage on 15/6/10.
// Copyright (c) 2015年 xiaomage. All rights reserved.
// #include <stdio.h>
void printfBinary(int value);
void printfBinary2(int value);
void printOct(int value);
void printfHex(int value); void printfHex2(int value);
void printfOct2(int value);
void printfBinary3(int value); int main(int argc, const char * argv[]) {
/*
0000000000000000000000000000
00000000000000000000000000000111
*/
int num = ;// 1010;
// printfBinary2(num);
// printOct(num);
// printfHex2(num);
// printfOct2(num);
printfBinary3(num);
return ;
} void printfBinary3(int value)
{
// 1.定义一个数组, 用于保存二进制中所有的取值
char charValues[] = {'', ''};
// 2.定义一个数组, 用于保存查询后的结果
char results[] = {''};
// 3.定义一个变量, 用于记录当前需要存储到查询结果数组的索引
int pos = ; while (value != ) {
// 1.取出1位的值
int res = value & ;
// 2.利用取出来得值到表中查询对应的结果
char c = charValues[res];
// 3.存储查询的结果
results[--pos] = c;
// 4.移除二进制被取过的1位
value = value >> ;
} // 4.打印结果
for (int i = pos; i < ; i++) {
printf("%c", results[i]);
}
printf("\n"); } void printfOct2(int value)
{
// 1.定义一个数组, 用于保存八进制中所有的取值
char charValues[] = {'', '', '', '', '', '', '', ''};
// 2.定义一个数组, 用于保存查询后的结果
char results[] = {''};
// 3.定义一个变量, 用于记录当前需要存储到查询结果数组的索引
int pos = ;
while (value != ) {
// 1.取出3位的值
int res = value & ;
// 2.利用取出来得值到表中查询对应的结果
char c = charValues[res];
// 3.存储查询的结果
results[--pos] = c;
// 4.移除二进制被取过的三位
value = value >> ;
} // 4.打印结果
for (int i = pos; i < ; i++) {
printf("%c", results[i]);
}
printf("\n"); } void printfHex2(int value)
{
// 1.定义一个数组, 用于保存十六进制中所有的取值
// 规律: 取出的4个二进制位得到的值, 正好是数组中角标对应的值
char charValues[] = {'', '', '', '', '', '', '', '', '', '', 'a', 'b', 'c', 'd', 'e', 'f'};
// '', '', '', '', '', '', '', ''
char results[] = {''};
int pos = ; while (value != ) {
// 取出4位的值
int res = value & ;
// 利用这个值作为索引去数组中查询对应的十六进制的值
char c = charValues[res];
// printf("%c", c);
// 将取出来得值放到用于存储结果数组中
results[--pos] = c; // 每取完一次就干掉它最低的4位
value = value >> ;
// printf("pos = %i\n", pos);
} for (int i = pos; i < ; i++) {
printf("%c", results[i]);
}
printf("\n");
} void printfHex(int value)
{
for (int i = ; i <= ; i++) {
int res = value & ; // 1111
// 对十六进制进行特殊处理
if (res > ) {
// 11 - 10 1 + a
char c = res - + 'a';
printf("%c", c);
}else
{
printf("%i", res);
}
value = value >> ;
}
} void printOct(int value)
{
for (int i = ; i <= ; i++) {
int res = value & ; //
printf("%i", res);
value = value >> ;
}
} void printfBinary2(int value)
{
for (int i = ; i <= ; i++) {
int res = value & ;
printf("%i", res);
value = value >> ;
}
printf("\n");
} void printfBinary(int value)
{
// int offset = sizeof(value) * 8 - 1;
int offset = (sizeof(value) << ) - ;
while (offset >= ) {
int res = (value >> offset) & ;
printf("%i", res);
offset--;
}
printf("\n");
}
//
// main.c
// 进制查表法优化
//
// Created by xiaomage on 15/6/10.
// Copyright (c) 2015年 xiaomage. All rights reserved.
// #include <stdio.h>
void total(int value, int base, int offset);
void ptintBinary(int num);
void printfOct(int num);
void printfHex(int num); int main(int argc, const char * argv[]) {
// insert code here...
// ptintBinary(10);
// printfOct(10);
printfHex();
return ;
} void printfHex(int num)
{
total(num, , );
} void printfOct(int num)
{
total(num, , );
} void ptintBinary(int num)
{
total(num, , );
} // 转换所有的进制
// value就是需要转换的数值
// base就是需要&上的数
// offset就是需要右移的位数
void total(int value, int base, int offset)
{
// 1.定义一个数组, 用于保存十六进制中所有的取值
char charValues[] = {'', '', '', '', '', '', '', '', '', '', 'a', 'b', 'c', 'd', 'e', 'f'};
// 2.定义一个数组, 用于保存查询后的结果
char results[] = {''};
// 3.定义一个变量, 用于记录当前需要存储到查询结果数组的索引
int pos = sizeof(results)/ sizeof(results[]); while (value != ) {
// 1.取出1位的值
int res = value & base;// 1 7 15
// 2.利用取出来得值到表中查询对应的结果
char c = charValues[res];
// 3.存储查询的结果
results[--pos] = c;
// 4.移除二进制被取过的1位
value = value >> offset;// 1 3 4
} // 4.打印结果
for (int i = pos; i < ; i++) {
printf("%c", results[i]);
}
printf("\n"); }

c14---排序,查找的更多相关文章

  1. Sublime文本排序&查找重复行&删除重复行

    排序 按F9或者选择菜单:Edit > Sort Lines,对每行文本进行排序 查找重复行 排序好后,按Ctrl+F,调出查找面板 查找字符串: ^(.+)$[\r\n](^\1$[\r\n] ...

  2. Java进阶(三十九)Java集合类的排序,查找,替换操作

    Java进阶(三十九)Java集合类的排序,查找,替换操作 前言 在Java方向校招过程中,经常会遇到将输入转换为数组的情况,而我们通常使用ArrayList来表示动态数组.获取到ArrayList对 ...

  3. 猪八戒吃西瓜(wmelon)-排序-查找

    问题 A: 猪八戒吃西瓜(wmelon) 时间限制: 1 Sec  内存限制: 64 MB提交: 30  解决: 14[提交][状态][讨论版] 题目描述 有一天,贪吃的猪八戒来到了一个大果园,果园里 ...

  4. C/C++ 排序&&查找算法(面试)

    一.排序 1.冒泡排序 void BubbleSort(int array[],int n) { ; ; ; ; ;i<n - ;i++) /*外循环控制排序的总趟数*/ { flag = ; ...

  5. javascript排序 查找算法大全

    在pptv的实习结束了, 忙着找工作的事,顺便把数据结构的那本书重新复习了一遍.为了加深印象,特意把里面的常用的排序.查找算法用js写了一遍 具体的实例在我的github上,大家可以访问的: http ...

  6. 深入JDK源码之Arrays类中的排序查找算法(转)

    原文出处: 陶邦仁 binarySearch()方法 二分法查找算法,算法思想:当数据量很大适宜采用该方法.采用二分法查找时,数据需是排好序的. 基本思想:假设数据是按升序排序的,对于给定值x,从序列 ...

  7. [Day7]循环、数组方法、排序查找

    1. ASCII(American Standard Code for Information Interchange) (1)数字0-9对应ASCII编码十进制为48-57, 字母a-z对应ASCI ...

  8. Java常用的排序查找算法

    public static void main(String[] args) {      // bubbleSort(); // int[] a = {20,2,10,8,12,17,4,25,11 ...

  9. python排序查找

    无序表查找 def seq_search(lst, key): found = False pos = 0 while pos < len(lst) and not found: if lst[ ...

  10. mysql 实现经纬度排序查找功能

    需求如下: 商品有多个门店,用户使用App时需要查找附近门店的商品,商品要进行去重分页. 思路: 1.确认mysql自带经纬度查询函数可以使用. 2.该需求需要利用分组排序,取每个商品最近门店的商品i ...

随机推荐

  1. MySql-Connector for NET 连接驱动选择

    尝试在Visual Studio2010, 2012环境下链接Mysql, 为啥不直接在App.config里面写字符串, 当然是可以,但是当你想用EF 的时候,必须要有个数据源, 首先在[服务资源管 ...

  2. 浅谈ByteBuffer转换成byte[]时遇到的问题

    有些时候我们要把ByteBuffer转换成byte[]来使用.于是很多时候会用以下代码来转换: ByteBuffer buf; .....(一些往buffer写数据的操作) byte[] bs= ne ...

  3. 【oracle开发】wmsys.wm_concat介绍

    wmsys.wm_concat是一个聚合函数,其作用是将一列数据转换成一行,也就是我们常用的行专列,但是该函数是一个undocument函数,所以不推荐大家使用这个函数.因为在后续的版本中还提不提供这 ...

  4. OpenCV视频进度播放控制

    本来打算把进度条嵌入MFC的PIC空间里面,结果显示进度条消失,看来还是不要这个样子了. 全局变量区域: //2.初始化进度条的位置 int G_slider_position = 0; CvCapt ...

  5. 测试 Zoundry Raven

    安装很方便,看看发布的内容是否好用 但发现从博客上取下来的内容是有问题的,不能正常打开

  6. C# ref 和 out 的使用

    private void button1_Click(object sender, EventArgs e) { ; ; Fun(ref a,ref b); //把a的地址和b的地址 传递过去 Mes ...

  7. turn.js中文API 写一个翻页效果的参数详细解释

    $('.flipbook').turn({     width: 922,     height: 600,     elevation: 50,     gradients: true,     a ...

  8. BZOJ 4278: [ONTAK2015]Tasowanie 后缀数组 + 贪心 + 细节

    Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in", "r", stdin ...

  9. vue中引入json数据,不用本地请求

    1.我的项目结构,需要在Daily.vue中引入daily.js中的json数据 2.把json数据放入一个js文件中,用exports导出,vscode的json格式太严格了,很多数据,调了一个多小 ...

  10. softmax回归---sigmoid(1)

    介绍softmax之前先讲讲sigmoid: 逻辑回归模型常用的函数:sigmoid函数(用来做二分类) 表达式:f(x)=L/(1+exp-k(x-x0)) 其图像: 本质:将一个真值映射到(0,1 ...