zoukankan      html  css  js  c++  java
  • 排序算法 之 一

      摸着良心写博客, 之前写的微博, 内容精华不少, 但是我要添加一些走心的干货!

      就从最基本的排序算法开始吧!

    1. 桶排序

      有 5 个同学,这 5 个同学分别考了 5 分、3 分、 5 分、2 分和 8 分,(满分是 10 分)。接下来将分数进行从大到小排序, 排序后是 8 5 5 3 2。   

     1 int main()
     2         {
     3             int a[11],i,j,t;
     4             for(i=0;i<=10;i++)
     5                 a[i]=0; //初始化为0
     6             
     7             for(i=1;i<=5;i++) //循环读入5个数
     8             {
     9                 scanf("%d",&t); //把每一个数读到变量t中
    10                 a[t]++; //进行计数
    11             }
    12             
    13             for(i=0;i<=10;i++) //依次判断a[0]~a[10] for(j=1;j<=a[i];j++) //出现了几次就打印几次
    14                 printf("%d ",i);
    15             getchar();getchar(); //这里的getchar();用来暂停程序,以便查看程序输出的内容 //也可以用system("pause");等来代替
    16             return 0;
    17        }

    2. 冒泡排序

      冒泡排序的基本思想是:每次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来。 冒泡排序的核心部分是双重嵌套循环。不难看出冒泡排序的时间复杂度是

    O(N2)。这是 一个非常高的时间复杂度。 

     1 // 2. 冒泡排序
     2         int score[6] = {2, 5, 7, 3, 1, 2};
     3         
     4         for (int i = 0; i < 6; i++) {
     5             for (int j = 0; j < 6 - i; j++) {
     6                 
     7                 float temp = 0;
     8                 if (score[j] > score[j+1]) { // 从小到大
     9                     temp = score[j];
    10                     score[j] = score[j+1];
    11                     score[j+1] = temp;
    12                 }
    13             }
    14         }
    15         
    16        
    17         for (int i = 0; i < 6; i++) {
    18             printf("score - %d
    ", score[i]);
    19         }

    3. 快速排序法

      快速排序的最差时间复杂度和 冒泡排序是一样的,都是 O(N2),它的平均时间复杂度为 O (NlogN)。 

      
     
     1 int n; // 定义全局变量
     2 int a[10] = {6, 5, 7, 3, 1, 8, 9, 10, 2, 4};
     3 
     4 void quickSort(int left, int right){
     5     // 3. 快速排序法
     6     int i, j, t, temp;
     7     
     8     if (left > right) {
     9         return ;
    10     }
    11     
    12     temp = a[left]; // temp存储基准数
    13     i = left;
    14     j = right;
    15     
    16     while (i != j) {
    17         // 顺序很重要, 要从右往左找
    18         while (a[j] >= temp && i < j) {
    19             j--;
    20         }
    21         
    22         // 从左往右找
    23         while (a[i] <= temp && i < j) {
    24             i++;
    25         }
    26         
    27         // 交换两个数在数组中的位置
    28         if(i < j){ // 在哨兵没有相遇时
    29             t = a[i];
    30             a[i] = a[j];
    31             a[j] = t;
    32         }
    33     }
    34     
    35     // 最终基数归位
    36     a[left] = a[i];
    37     a[i] = temp;
    38     
    39     quickSort(left, i-1); // 继续处理左边的, 递归
    40     quickSort(i + 1, right); // 继续处理右边的, 递归
    41 }
    42 
    43 int main(int argc, const char * argv[]) {
    44     @autoreleasepool {
    45         // insert code here...
    46         NSLog(@"Hello, World!");
    47         
    48         
    49         
    50         quickSort(1, 10);
    51         
    52         for (int i = 0; i < 10; i++) {
    53             printf("%d
    ", a[i]);
    54         }
    55         
    56         getchar();getchar();
    57 }
     
  • 相关阅读:
    Spring Boot 的常用 API 说明
    错误:No WebApplicationContext found: no ContextLoaderListener or DispatcherServlet registered?
    [剑指offer] 2. 替换空格
    [剑指offer] 1. 二维数组中的的查找
    [leetcode] 300. Longest Increasing Subsequence (Medium)
    [leetcode] 929. Unique Email Addresses (easy)
    微信小程序post 服务端无法获得参数问题
    python虚拟环境管理 Pipenv 使用说明
    [leetcode] 87. Scramble String (Hard)
    [leetcode] 456. 132 Pattern (Medium)
  • 原文地址:https://www.cnblogs.com/guangleijia/p/5163335.html
Copyright © 2011-2022 走看看