排序算法代码集

1.有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。


//void find_k(int* arr, int a, int k)
//{
//    int v = a - 1;
//    int x = 0;
//    while (v>=x)
//    {
//        if (arr[x] < k)
//        {
//            x++;
//        }
//        else if (arr[v] > k)
//        {
//            v--;
//        }
//        else
//        {
//            printf("存在");
//            break;
//        }
//    }
//}
//int main()
//{
//    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//    int a = sizeof(arr) / sizeof(arr[0]);
//    int k = 0;
//    scanf("%d", &k);
//    find_k(arr,a,k);
//    return 0;
//}

2.判断凶手,A,B,C,D


//int main()
//{
//    int A = 0, B = 0, C = 0, D = 0;
//    int FD;//因为c和d的供词刚好对立 表示对立的
//    int i;
//    for (i = 1; i <= 4; i++)
//    {
//
//        if (i == 1)//A说的假
//        {
//            A = 1; C = 1; FD = 1; D = 0;
//        }
//        if (i == 2)//B说的假
//        {
//            A = 0; C = 0; FD = 1; D = 0;
//        }
//        if (i == 3)//C说的假
//        {
//            A = 0; C = 1; FD = 0; D = 0;
//        }
//        if (i == 4)//D的说的假
//        {
//            A = 0; C = 1; FD = 1; D = 0;
//        }
//        if (A + B + C + D + FD == 1 && FD == D)//只有一个人是凶手 当和为1时一个凶手出现  因为CD供词推出的都是D是不是 与上FD==D是为了排除D是D不是的情况 
//            printf("A=%d B=%d C=%d D=%d\n", A, B, C, D);
//    }
//    return 0;
//}

3.杨辉三角


//#define N 14
//int main()
//{
//    int i, j, k, n = 0, a[N][N];
//    scanf("%d", &n);
//    for (i = 1; i <= n + 1; i++)
//        a[i][1] = a[i][i] = 1;
//    for (i = 3; i <= n + 1; i++)
//        for (j = 2; j <= i - 1; j++)
//            a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
//    for (i = 1; i <= n + 1; i++)
//    {
//        for (k = 1; k <= n + 1 - i; k++)
//            printf("  ");
//        for (j = 1; j <= i; j++)
//            printf("%4d", a[i][j]);
//
//        printf("\n");
//    }
//}

4.实现计算器


//Cul(int (*pf)(int x,int y))
//{
//    int x = 0;
//    int y = 0;
//    int ret = 0;
//    printf("请输入两个操作数:_ _\n");
//    scanf("%d %d", &x, &y);
//    ret = pf(x, y);
//    printf("结果为%d\n", ret);
//}
//int Add(int x, int y)
//{
//    return x + y;
//}
//int jian(int x, int y)
//{
//    return x - y;
//}
//int cheng(int x, int y)
//{
//    return x * y;
//}
//int chu(int x, int y)
//{
//    return x / y;
//}
//void meue()
//{
//    printf("*************************************************\n");
//    printf("*******1.Add      2.jian      3.cheng************\n");
//    printf("*******4.chu      0.退出计算器       ************\n");
//    printf("*************************************************\n");
//    printf("请选择选择:");
//}
//int main()
//{
//    int input = 0;
//    meue();
//    scanf("%d", &input);
//    switch (input)
//    {
//    case 1:
//        Cul(Add);
//    case 2:
//        Cul(jian);
//    case 3:
//        Cul(cheng);
//    case 4:
//        Cul(chu);
//    case 0:
//        printf("已成功退出计算器\n");
//    }
//    return 0;
//}

5.练习使用库函数,qsort排序各种类型的数据


//#include<stdlib.h>
//int compare(const void*p1,const void*p2)
//{
//    return *(int*)p1 - *(int*)p2;
//}
//void Printf(int lenth,int*arr)
//{
//    for (int i = 0; i < lenth; i++)
//    {
//        printf("%d", arr[i]);
//    }
//    printf("\n");
//}
//int main()
//{
//
//    int arr[10] = { 5,8,9,4,6,7,10,2,1,3 };
//    int lenth = sizeof(arr) / sizeof(arr[0]);
//    int net = sizeof(arr[0]);
//    Printf(lenth, arr);
//    qsort(arr, lenth, net, compare);
//    Printf(lenth, arr);
//    return 0;
//}


6.字符的排序


//#include<stdlib.h>
//#include<string.h>
//void Printf(int lenth,char*arr)
//{
//    for (int i = 0; i < lenth; i++)
//    {
//        printf("%c ", arr[i]);
//    }
//    printf("\n");
//}
//int compare(const void* p1, const void* p2)
//{
//    return strcmp((char*)p1, (char*)p2);
//}
//int main()
//{
//    char arr [] = {'g','h','c','e','a','f','b','d'};
//    int lenth = sizeof(arr) / sizeof(arr[0]);
//    int net = sizeof(arr[0]);
//    Printf(lenth, arr);
//    qsort(arr, lenth, net, compare);
//    Printf(lenth, arr);
//    return 0;
//}


7.结构体的排序


//#include<stdlib.h>
//#include<string.h>
//struct stu
//{
//    char name[100];
//    int age;
//};
//void Printf(int lenth, struct stu* arr)
//{
//    for (int i = 0; i < lenth; i++)
//    {
//        printf("%s %d\n", arr[i].name,arr[i].age);
//    }
//}
//int compare(const void* p1, const void* p2)
//{
//    return ((struct stu*)p1)->age - ((struct stu*)p2)->age;
//}
//int main()
//{
//    struct stu  arr[] = { {"zhangsan",28},{"suyu",18},{"chengtaiji",14} };
//    int lenth = sizeof(arr) / sizeof(arr[0]);
//    int net = sizeof(arr[0]);
//    Printf(lenth, arr);
//    qsort(arr, lenth, net, compare);
//    Printf(lenth, arr);
//    return 0;
//}


8.一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。
编写一个函数找出这两个只出现一次的数字。

例如:
有数组的元素是:1,2,3,4,5,1,2,3,4,6
只有5和6只出现1次,要找出5和6.
//int main()
//{
//    int arr[] = { 1,2,3,4,5,1,2,3,4,6 };
//    int lenth = sizeof(arr) / sizeof(arr[0]);
//    int i = 0;
//    while (i < lenth)
/

/    {
//        int cout = 0;
//        for (int j = 0; j < lenth; j++)
//        {
//            if (arr[i] == arr[j])
//                cout++;
//        }
//        if (cout == 1)
//        {
//            printf("%d ", arr[i]);
//        }
//        i++;
//    }
//    return 0;


9.模仿qsort的功能实现一个通用的冒泡排序

#include<string.h>
void My_qsort(void* arr, size_t lenth, size_t size, int (*compare_int)(const void* p1, const void* p2))
{
    int j = 0;
    for (int j = 0; j < lenth; j++)
    {
        int i = 0;
        for (i = 0; i < lenth- 1; i++)
        {
            if (compare_int((char*)arr + size * i, (char*)arr + (i + 1) * size) > 0)
            {
                swap((char*)arr + size * i, (char*)arr + (i + 1) * size, size);
            }
        }
    }
}
swap(char*buf1, char*buf2,size_t size)
{
    char*buf = 0;
    for (int j = 0; j < size; j++)
    {
    char tmp = *buf1;
    *buf1 = *buf2;
    *buf2 = tmp;
    buf1++;
    buf2++;
    }
}
int compare_int(const void* p1, const void* p2)
{
    return *(int*)p1 - *(int*)p2;
}
int compare_char(const void* p1, const void* p2)
{
    return strcmp(*(char*)p1, *(char*)p2);
}
Printf(int* arr, int lenth)
{
    for (int i = 0; i < lenth; i++)
    {
        printf("%d ", *(arr + i));
    }
}
int main()
{
    int arr[10] = { 9,5,3,7,4,6,2,1,0,8 };
    int lenth = sizeof(arr) / sizeof(arr[0]);
    int size = sizeof(arr[0]);
    My_qsort(arr, lenth, size, compare_int);
    Printf(arr, lenth);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百爱微雾海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值