iOS常见算法(二分法 冒泡 选择 快排)

二分法:

平均时间复杂度:O(log2n)

int halfFuntion(int a[], int length, int number)

{

int start = 0;

int end = length - 1;

int index = 0;

while(start < end)

{

index = start + (end - start)/2

if(a[index] == number){

return index;

} else if(a[index] < number){

start = index + 1;

} else{

end = index - 1;

}

}

return index;

}

冒泡排序:

/**

 平均时间复杂度:O(n2)

 

 空间复杂度:O(1)  (用于交换)

 

 稳定性:稳定

 */

void paoFuntion(int a[], int length){

    for (int i = 0; i < length - 1; i++) {

        for (int j = 0; j < length - 1 - i; j++) {

            if (a[j] > a[j+1]) {

                int temp = a[j];

                a[j] = a[j+1];

                a[j+1] = temp;

            }

        }

    }

}

选择排序:

/**

 平均时间复杂度:O(n2)

 

 空间复杂度:O(1)  (用于交换和记录索引)

 

 稳定性:不稳定 (比如序列【5, 5, 3】第一趟就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)

 */

void chooseFuntion(int a[],int length){

    for (int i = 0; i < length - 1; i++) {

        for (int j = i + 1; j < length ; j++) {

            if (a[i] > a[j]) {

                int temp = a[j];

                a[j] = a[i];

                a[i] = temp;

            }

        }

    }

}

 

快排:点击打开链接

http://blog.csdn.net/niejiafa_131/article/details/44807653

时间: 2024-08-09 02:18:56

iOS常见算法(二分法 冒泡 选择 快排)的相关文章

排序算法之冒泡和快排

冒泡排序: 顾名思义:参与排序的数据就像水中的气泡慢慢浮出水面一样"浮"到数列顶端. 冒泡排序要点: 1.  两层循环,外层循环控制走访数列重复进行的次数,内层循环进行数据的比较.交换,是数据"上浮". 2.  内层循环是相邻的数据进行比较. C语言代码实现: // 冒泡排序 void sort_bubble(int n){ int i,j; for(i=0;i<n-1;i++){ for(j=0;j<n-1-i;j++){ if(arr[j]>a

排序算法-冒泡——插入——快排

冒泡排序,往两个方向泡,一个往小泡,一个网大泡 #include<stdio.h> #include<stdlib.h> #include<time.h> void bubble_sort(int *a,int n){ int temp; for(int i=0;i<n;i++) for(int j=0;j<n-i-1;j++){ if(a[j]>a[j+1]){ temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } v

iOS常见算法以及应用

算法比较 关键词 二分 递归 分治 回溯 冒泡排序 思想:两次循环,外层进行循环次数的控制,内层循环,进行数据之间的比较,大的数据上浮(下沉) 12345678910111213141516171819202122232425262728293031323334353637383940 #pragma mark - Objective-C//冒泡排序- (void)bubbleSort:(id)array{ if (!([array isKindOfClass:[NSArray class]]

算法导论学习之快排+各种排序算法时间复杂度总结

快排是一种最常用的排序算法,因为其平均的时间复杂度是nlgn,并且其中的常数因子比较小. 一.快速排序 快排和合并排序一样都是基于分治的排序算法;快排的分治如下: 分解:对区间A[p,r]进行分解,返回q,使得A[p–q-1]都不大于A[q] A[q+1,r]都大于A[q]; 求解:对上面得到的区间继续递归进行快排 合并:因为快排是原地排序,所以不需要特别的合并 从上可以看出最重要的就是分解函数,其按关键值将数组划分成3部分,其具体实现的过程见代码注释. 我们一般取数组的最后一个元素作为划分比较

普林斯顿公开课 算法3-3:三路快排

很多时候排序是为了对数据进行归类,比如对城市进行排序,对员工的职业进行排序.这种排序的特点就是重复的值特别多. 如果使用普通的快排对这些数据进行排序,会造成N^2复杂度,但是归并排序和三路快排就没有这样的问题. 三路快排 三路快排的基本思想就是,在对数据进行分区的时候分成左中右三个部分,中间都是相同的值,左侧小于中间,右侧大于中间. 性能 三路快排的复杂度比普通快排小,主要取决于数据中重复数据的数量.重复数据越多,三路快排的复杂度就越接近于N. 代码 public class Quick3 {

Java常见的几种排序算法-插入、选择、冒泡、快排、堆排等

本文就是介绍一些常见的排序算法.排序是一个非常常见的应用场景,很多时候,我们需要根据自己需要排序的数据类型,来自定义排序算法,但是,在这里,我们只介绍这些基础排序算法,包括:插入排序.选择排序.冒泡排序.快速排序(重点).堆排序.归并排序等等.看下图: 给定数组:int data[] = {9,2,7,19,100,97,63,208,55,78} 一.直接插入排序(内部排序.O(n2).稳定) 原理:从待排序的数中选出一个来,插入到前面的合适位置. [java] view plain copy

常见的几种排序算法-插入、选择、冒泡、快排、堆排等

排序是一个非常常见的应用场景,很多时候,我们需要根据自己需要排序的数据类型,来自定义排序算法,但是,在这里,我们只介绍这些基础排序算法,包括:插入排序.选择排序.冒泡排序.快速排序(重点).堆排序.归并排序等等.看下图: 给定数组:int data[] = {9,2,7,19,100,97,63,208,55,78} 一.直接插入排序(内部排序.O(n2).稳定) 原理:从待排序的数中选出一个来,插入到前面的合适位置. package com.xtfggef.algo.sort; public

Java实现的各种排序算法(包括冒泡,快排等)

//堆排序 不稳定 import java.util.Arrays; public class HeapSort { public static void main(String[] args) { int[] a={49,38,65,97,76,13,27,49,78,34,12,64}; int arrayLength=a.length; //循环建堆 for(int i=0;i<arrayLength-1;i++){ //建堆 buildMaxHeap(a,arrayLength-1-i)

排序算法的简单实现(冒泡和快排)

排序算法 冒泡排序 原理:把相邻的元素两两比较,根据大小来交换元素的位置. 原始的冒泡排序是稳定排序.由于该排序的每一轮要遍历所以元素,轮转的次数和元素数量相当,所以时间复杂度是 O(N^2). java代码表达如下: import java.util.Arrays; public class BubbleSort{ private static void sort(int array[]){ int tmp = 0; for (int i = 0; i < array.length; i++)