选择排序、冒泡排序与进制查表法
2018-10-29 本文已影响0人
SimpleSJ
1.选择排序
- 特点:拿到其中一个元素的值,依次和其他元素进行比较,最值出现在第0位.
主要用到循环嵌套,规律.
1.尖尖朝下,让内循环的初始化随外循环改变
2.尖尖朝上,改变内循环的条件语句
#include <stdio.h>
void selectMethod(int values[],int length);
int main(int argc, const char * argv[]) {
// 已知一个无序的数组, 里面有8个元素, 要求对数组进行排序
int nums[] = {12,54,2,58,32,13,100,88};
int length = sizeof(nums)/sizeof(nums[0]);
selectMethod(nums,length);
return 0;
}
void selectMethod(int values[],int length){
for (int i = 0; i<length - 1; i++ ) {
for (int j = i+1 ; j < length; j ++) {
// printf("i[%i]---j[%i]\n",i,j);
if (values[i] > values[j]) {
int temp = values[i];
values[i] = values[j];
values[j] = temp;
}
}
// printf("\n");
}
for (int s = 0; s< length ; s ++) {
printf("values[%i] = %i\n", s, values[s]);
}
}
//输出:
values[0] = 2
values[1] = 12
values[2] = 13
values[3] = 32
values[4] = 54
values[5] = 58
values[6] = 88
values[7] = 100
2.冒泡排序
- 特点:用相邻的两个元素相比较,每比完一次,最值出现在末尾,依然是一个尖尖朝下的循环嵌套
void bubbleMethod(int values[],int length);
int main(int argc, const char * argv[]) {
// 已知一个无序的数组, 里面有8个元素, 要求对数组进行排序
int nums[] = {12,54,2,58,32,13,100,88};
int length = sizeof(nums)/sizeof(nums[0]);
// selectMethod(nums,length);
bubbleMethod(nums, length);
return 0;
}
void bubbleMethod(int values[],int length){
for (int i = 0; i < length - 1; i ++) {
for (int j = 0; j < length -1 -i ; j++) {
// printf("*");
// printf("j[%i]---j[%i]\n",j,j+1);
if (values[j] > values[j+1]) {
int temp = values[j];
values[j] = values[j+1];
values[j+1] = temp;
}
}
// printf("\n");
}
for (int s = 0; s< length ; s ++) {
printf("values[%i] = %i\n", s, values[s]);
}
}
//输出:
values[0] = 2
values[1] = 12
values[2] = 13
values[3] = 32
values[4] = 54
values[5] = 58
values[6] = 88
values[7] = 100
3.进制查表法
- 没什么好说的,直接上代码吧
#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(2018);
return 0;
}
//转换16进制
void printfHex(int num)
{
total(num, 15, 4);
}
//转换8进制
void printfOct(int num)
{
total(num, 7, 3);
}
//转换进制
void ptintBinary(int num)
{
total(num, 1, 1);
}
// 转换所有的进制
// value就是需要转换的数值
// base就是需要&上的数 2进制&1 8进制 &7 16进制 &15 ,任何数&1 结果都等于那个数
// offset就是需要右移的位数
void total(int value, int base, int offset)
{
// 1.定义一个数组, 用于保存十六进制中所有的取值
char charValues[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
// 2.定义一个数组, 用于保存查询后的结果
char results[32] = {'0'};
// 3.定义一个变量, 用于记录当前需要存储到查询结果数组的索引
int pos = sizeof(results)/ sizeof(results[0]);
while (value != 0) {
// 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 < 32; i++) {
printf("%c", results[i]);
}
printf("\n");
}
//输出:
7e2