zoukankan      html  css  js  c++  java
  • 排序算法实现

    1.排序:将无序的数据元素调整为有序的数据元素的过程。

    2.排序算法的稳定性:如果在数据序列中有两个元素相等,在排序之前和排序之后,这两个元素的相对位置保持不变,则排序算法是稳定的。

    冒泡排序——————————————————————————————

    void swap(int *p1, int *p2)
    {
     int temp = *p1;
     *p1 = *p2;
     *p2 = temp;
    }

    void bubSort(int *p, int n)
    {
     for (int i = 0; i < n; i++)
     {
      for (int j = 1; j < n-i; j++)
      {
       if (p[j - 1] > p[j])
       {
        swap(&p[j - 1], &p[j]);
       }
      }
     }
    }
    void print(int *p, int n)
    {
     for (int i = 0; i < n; i++)
     {
      printf("%d ", p[i]);
     }
    }
    void main01()
    {
     int arr[] = { 1, 2, 5, 25, 19, 23, 12, 11, 16 };
      bubSort( arr , sizeof(arr) / sizeof(int));
      print(arr, sizeof(arr) / sizeof(int));
      getchar();
    }

    选择排序——————————————————————————————————————

    void print(int *p, int n)
    {
     for (int i = 0; i < n; i++)
     {
      printf("%d ", p[i]);
     }
    }
    void swap(int *p1, int *p2)
    {
     int temp = *p1;
     *p1 = *p2;
     *p2 = temp;
    }
    void SelectSort(int *p, int n)
    {
     int temp;
     int min;
     for (int i = 0; i < n; i++)
     {
      temp = p[i];
      min = i;
      for (int j =i+1 ; j < n; j++)
      {
       if (temp<p[j])
       {  
        temp = p[j];
        min = j;
       }
       
      }
      if (min != i)
      {
       swap(&p[min], &p[i]);
      }
     }
    }
    void main()
    {
     int arr[] = { 12, 10, 39, 73, 6, 23, 2,13,123,45,25 };
     SelectSort(arr, sizeof(arr) / sizeof(int));
     print(arr, sizeof(arr) / sizeof(int));
     getchar();
    }

    二分查找——————————————————————————————————---

    void swap(int *p1, int *p2)
    {
     int temp = *p1;
     *p1 = *p2;
     *p2 = temp;
    }

    //二分查找
    void halfFind(int *p, int low, int hight, int key)
    {
     int mid = 0;
     int temp;
     int min;
     for (int i = 0; i < hight -low; i++)
     {
      min = i;
      temp = p[i];
      for (int j = i +1; j < hight - low; j++)
      {
       if (temp > p[j])
       {
        temp = p[j];
        min = j;
       }
      }
      if (min != i)
      {
       swap(&p[min], &p[i]);
      }
     }
     while (low <= hight)
     {
      mid = (low + hight) / 2;
      if (p[mid] == key)
      {
       printf("%d", mid);
       return;
      }
      else if (key > p[mid])
      {
       low += 1;
      }
      else
      {
       hight -= 1;
      }
     }
    }

    //通过递归实现二分查找————————————————————————————————————————
    void binFind(int *p, int low, int hight, int key)
    {
     int mid = (low + hight) / 2;
     if (low <= hight)
     {
      if (p[mid] == key)
      {
       printf("%d", mid);
       return;
      }
      else if (p[mid] > key)
      {
       binFind(p, low + 1, hight, key);
      }
      else
      {
       binFind(p, low, hight - 1, key);
      }
     }
     return;
    }

  • 相关阅读:
    现在连Linux都搞不懂,当初我要是这么学习操作系统就好了!
    一时技痒,撸了个动态线程池,源码放Github了
    Java线程池ThreadPoolExecutor使用和分析(一)
    canch----1.对缓存的思考
    1.java 内存数据库--H2数据库使用指南
    What’s the difference between persist, save, merge and update? Which one should you use?
    primary key's generator in JPA entity
    STM32F103驱动M24256 256k存储芯片进行读写
    【Proteus+51单片机学习笔记】-51/52系列单片机简介
    【STM32项目笔记】STM32CubeMX+Keil+Proteus联合实现LED闪烁
  • 原文地址:https://www.cnblogs.com/jefy/p/9388015.html
Copyright © 2011-2022 走看看