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

  • 相关阅读:
    再次尝试windows下msys+MinGW编译ffmpeg
    iOS设备的硬件适配 (关于armv6, armv7, armv7s ) <转>
    vmware虚拟机下ubuntu 13.04使用zeranoe脚本交叉编译ffmpeg
    vmware 8下ubuntu 13.04安装vmware tools
    ubuntu下使用脚本交叉编译windows下使用的ffmpeg + X264
    网上看来的
    ffmpeg关于aac解码
    iOS阶段学习第15天笔记(NSDate操作)
    iOS阶段学习第15天笔记(NSDictionary与NSMutableDictionary 字典)
    iOS阶段学习第15天笔记(NSArray与NSMutableArray 数组)
  • 原文地址:https://www.cnblogs.com/jefy/p/9388015.html
Copyright © 2011-2022 走看看