美文网首页
典型排序算法

典型排序算法

作者: 莫_名 | 来源:发表于2016-09-20 20:39 被阅读0次
NSMutableArray* numsM = [NSMutableArray arrayWithArray:
  @[@(3),@(20),@(1),@(46),@(0),@(-4),@(-23),@(-88),@(76),@(120)]];
NSUInteger length = numsM.count;

冒泡排序:
      //冒泡排序
    for (int i =0; i<length-1; i++) {//length个数,需要比较length-1趟(0~length-2,共length-1趟)
        //用于标记某一趟是否进行了交换,如果没有进行交换那就是已经排好序了
        BOOL flag = false;
        for (int j=0; j<length-1-i; j++) {//从第0个开始,前length-1-i个相邻之间比较,如果有需要就交换数据(共length-i趟)
            if ([numsM[j] intValue]>[numsM[j+1] intValue]) {
                NSNumber* temp = numsM[j];
                numsM[j]=numsM[j+1];
                numsM[j+1] = temp;
                //发生了交换就更改flag
                flag = true;
            }
        }
        //如果没有进行交换那就是已经排好序了
        if (!flag) {
            break;
        }
    }

选择排序:
      //选择排序
    for (int i=0; i<length-1; i++) {//用前n-1个数以此与自己身后的每一个数进行比较,共要length-1趟(0~length-2)
        for (int j=i+1; j<length; j++) {//用第i个数和身后的依次比,满足条件就换位
            if ([numsM[i] intValue]>[numsM[j] intValue]) {
                NSNumber* temp = numsM[i];
                numsM[i]=numsM[j];
                numsM[j] = temp;
            }
        }
    }

快速排序:
int data[] = {9, -16 , 21 ,123 ,-60 ,-49 , 22 , 30 ,13};
int len = sizeof(data) / sizeof(data[0]);
quickSort(data ,0, len-1);

// 将指定数组的i和j索引处的元素交换
void swap(int* data, int i, int j)
{
int tmp;
tmp = *(data + i);
*(data + i) = *(data + j);
*(data + j) = tmp;
}
// 对data数组中从start~end索引范围的子序列进行处理
// 使之满足所有小于分界值的放在左边,所有大于分界值的放在右边
void quickSort(int* data
, int start , int end)
{
// 需要排序
if (start < end)
{
// 以第一个元素作为分界值
int base = *(data + start);
// i从左边搜索,搜索大于分界值的元素的索引
int i = start;
// j从右边开始搜索,搜索小于分界值的元素的索引
int j = end + 1;
while(true)
{
// 找到大于分界值的元素的索引,或i已经到了end处
while(i < end && data[++i] <= base);
// 找到小于分界值的元素的索引,或j已经到了start处
while(j > start && data[--j] >= base);
if (i < j)
{
swap(data , i , j);
}
else
{
break;
}
}
swap(data , start , j);
// 递归左子序列
quickSort(data , start , j - 1);
// 递归右边子序列
quickSort(data , j + 1, end);
}
}

相关文章

  • 排序算法-7---希尔排序

    排序算法-7---希尔排序 概念 希尔排序(Shellsort),也称递减增量排序算法,是一种典型的插入排序算法,...

  • 典型排序算法

  • 冒泡排序

    冒泡排序(Bubble Sort)是一种典型的交换排序算法,通过交换数据元素的位置进行排序。 一、算法基本思想 (...

  • 每日一算法:归并排序

    归并排序(Merge sort)是最流行的排序算法之一。该算法是采用分治法的一个非常文章典型的应用。 作为一种典型...

  • Python算法(一) 数组冒泡排序(难度等级:easy)

    冒泡排序(Bubble Sort)是一种典型的交换排序算法,通过交换数据元素的位置进行排序。算法原理:从无序序列头...

  • 合并排序

    合并排序 算法介绍: 合并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法 的一个非常典型的应用。合...

  • Java常见排序算法详解——归并排序

    概念: 归并排序Merge Sort归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的典型应用。...

  • 堆排序

    hello,你好,欢迎来到堆排序!堆排序是典型的数据结构和算法的结合,首先使用数据结构记录了必要的信息,然后算法通...

  • 归并排序算法(JavaScript实现)

    归并排序是是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。 算法思想 把 n 个元...

  • 归并排序

    归并排序 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法的一个非常典型的应用。时间复杂度是O(...

网友评论

      本文标题:典型排序算法

      本文链接:https://www.haomeiwen.com/subject/xbvoettx.html