iOS开发-常用排序算法

0.434字数 250阅读 20

前言

  • 常见的几种排序,针对不同数据,数据量,找到最合适的算法,是衡量一个程序员的基本标准,因此掏出小本子,又复习(其实因为不常用,已经忘完了~~)
    代码示例如下

公共部分

 int i,j,t,a[10],min;
        printf("请输入10个整数:\n");
        for (i = 0; i < 10; i++) {
            scanf("%d",&a[i]);
        }
        printf("\n");
  1. 冒泡排序法
    俗称 打擂台,从第一个元素开始,依次与后面的元素比较 平均时间复杂度:O(n^2) 平均空间复杂度:O(1) .
    for (i = 0; i < 10; i++) {
        for (j = 0; j < 9-i; j++) {
            if (a[j] > a[j+1]) {
                t = a[j];
                a[j] = a[j+1];
                a[j+1] = t;
            }
        }
    }
  1. 插入排序法
         1. 从第一个元素开始,认为该元素已经是排好序的。
         2. 取下一个元素,在已经排好序的元素序列中从后向前扫描。
         3. 如果已经排好序的序列中元素大于新元素,则将该元素往右移动一个位置。
         4. 重复步骤3,直到已排好序的元素小于或等于新元素。
         5. 在当前位置插入新元素。
         6. 重复步骤2。 平均时间复杂度:O(n^2) 平均空间复杂度:O(1)

代码示例:

 for (i = 1; i < 10; i ++) {
            t = a[i];
            for (j = i; j > 0 && t < a[j-1];j--) {
                a[j] = a[j - 1];
            }
            a[j] = t;
        }
  1. 选择排序
    假设第一个元素是最小值,下标记为min,循环剩余元素,记下下标,再与之前的最小值相比较,以此不断找出最小值,排到最前面

     for (i= 0; i < 10; i++) {
         min = i;
         for (j = i+1; j < 10; j++) {
             if (a[min] > a[j]) {
                 min = j;
             }
         }
         //说明a[min]目前不是最小值,需要交换位置
         if (min != i) {
             t = a[min];
             a[min] = a[i];
             a[i] = t;
         }
     }
    

结尾

推荐阅读更多精彩内容

  • 栈 1. 栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被...
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好...
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
  • 1.把二元查找树转变成排序的双向链表题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建...