选择排序、冒泡排序与进制查表法

1.选择排序

  • 特点:拿到其中一个元素的值,依次和其他元素进行比较,最值出现在第0位.

主要用到循环嵌套,规律.
1.尖尖朝下,让内循环的初始化随外循环改变
2.尖尖朝上,改变内循环的条件语句

#include 

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 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 
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

你可能感兴趣的:(选择排序、冒泡排序与进制查表法)