黑马程序员_iOS_C语言实现排序、查找和插入

来源:互联网 发布:java创建多线程数组 编辑:程序博客网 时间:2024/06/05 00:23

——- android培训、java培训、期待与您交流! ———-

#include <stdio.h>/** *  升序交换 * *  @param a     数组 *  @param front 前一个元素下标 *  @param back  后一个元素下标 */void swap_up(int a[],int front,int back){    if (a[front]>a[back]) {        a[front] = a[front]+a[back];        a[back] = a[front] - a[back];        a[front] = a[front] - a[back];    }}/** *  降序交换 * *  @param a     数组 *  @param front 前一个元素下标 *  @param back  后一个元素下标 */void swap_down(int a[],int front,int back){    if (a[front]<a[back]) {        a[front] = a[front]+a[back];        a[back] = a[front] - a[back];        a[front] = a[front] - a[back];    }}/** *  冒泡排序 *  分析:小数上浮大数下沉 *  @param a   数组 *  @param len 数组长度 */void bubbleSort(int a[],int len){    for (int i = 0; i<len-1; i++) {        for (int j =0; j<len-1-i; j++) {            swap_up(a, j, j+1);        }    }    printf("\n");}/** *  选择排序 *  分析:选取最小值置于最前 *  @param a   数组 *  @param len 数组长度 */void selectSort_min(int a[],int len){    for (int i = 0; i<len - 1; i++) {        for (int j = i+1; j<len; j++) {            swap_up(a, i, j);        }    }}/** *  选择排序 *  分析:选取最大值置于最后 *  @param a   数组 *  @param len 数组长度 */void selectSort_max(int a[],int len){    for (int i = len-1; i>=0; i--) {        for (int j = 0; j<i; j++) {            swap_up(a, j, i);        }    }}/** *  折半查找(有序数组) *  分析:key值与中间数值比较 *  @param a   数组 *  @param len 数组长度 *  @param key 要查的值 */int binarySearch(int a[],int len,int key){    int low = 0,high = len-1;    int mid;    while (low<=high) {        mid = (low+high)/2;        if (key>a[mid]) {            low = mid + 1;        }else if (key<a[mid]){            high = mid - 1;        }else{            return mid;        }    }    //没有查找到    return -1;}/** *  折半查找_插入值 * *  @param a   数组 *  @param len 数组长 *  @param key 插入值 * *  @return 插入的位置 */int binarySearch_insert(int a[],int len,int key){    int low = 0,high = len-1;    int mid;    while (low<=high) {        mid = (low+high)/2;        if (key>a[mid]) {            low = mid + 1;        }else if (key<a[mid]){            high = mid - 1;        }else{            return mid+1;        }    }    //没有查找到    return low;}int main(int argc, const char * argv[]) {    //升序排列数组    int a[] = {3,1,5,7,2,12,45,2,3,6,9};    int len = sizeof(a)/sizeof(int);    //排序前    printf("排序前:");    for (int i = 0; i<len; i++) {        printf("%d  ",a[i]);    }    printf("\n");    //排序//    bubbleSort(a, len);//    selectSort_min(a, len);    selectSort_max(a, len);    //排序后    printf("排序后:");    for (int i = 0; i<len; i++) {        printf("%d  ",a[i]);    }    printf("\n");    //折半查找    int i = binarySearch(a, len, 4);    printf("%d\n",i);    i = binarySearch_insert(a, len, 11);    printf("%d\n",i);    return 0;}
0 0
原创粉丝点击