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 }
     
  • 相关阅读:
    Python中的类(上)
    Django REST Framework API Guide 07
    Django REST Framework API Guide 06
    Django REST Framework API Guide 05
    Django REST Framework API Guide 04
    Django REST Framework API Guide 03
    Django REST Framework API Guide 02
    Django REST Framework API Guide 01
    Django 详解 信号Signal
    Django 详解 中间件Middleware
  • 原文地址:https://www.cnblogs.com/guangleijia/p/5163335.html
Copyright © 2011-2022 走看看