美文网首页
几种常见的排序

几种常见的排序

作者: Fight_ing | 来源:发表于2018-03-25 11:09 被阅读12次
spring
1.选择排序
  • 比较后,符合条件每次都进行交换。
for (int i= 0;i<cnt-1;i++){
        for (int j=i + 1;j<cnt;j++){
            if(array[i]<array[j]){
                int tmp=array[i];
                array[i]=array[j];
                array[j]=tmp;
            }
        }
    }
2.冒泡排序
/* 冒泡排序 */
    for (int i = 0; i < cnt - 1; i ++) {
        for (int j = 0; j < cnt - i - 1; j ++) {
            if (array[j] < array[j + 1]) {
                int tmp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = tmp;
            }
        }
    }
3.插空排序
  • 代码解析见注释。
        int  a[5]={9,8,10,2,20};
        int key,j;// key为每次被拿出的值(也就是初始提供“空”的值),j为要比较到的最大索引
        for (int i=1; i<5; i++) {// 直接插入排序
            key=a[i];// 取出当前要比较项
            for (j=i-1; j>=0&&a[j]>key; j--) {// 和直到索引j位置的元素逐一比较
                a[j+1]=a[j];// j为更新出来的新空(但是只要进了循环,此次循环结束就会进行一次j--操作,所以下面要+1)
            }
            a[j+1]=key;// j+1为最后留给key的空
        }

整体测试代码


#import <Foundation/Foundation.h>
void initArray(int array[],int cnt);
void selectSortForArray(int array[],int cnt);
void showArray(int array[],int cnt);


void initArray(int array[],int cnt)
{
    for(int i= 0;i<cnt;i++)
        array[i] = arc4random()  % 100;
}
void selectSortForArray(int array[],int cnt)
{
    /*for (int i = 0; i<cnt-1; i++){
        for (int j = i+1; j<cnt; j++)
        {if (array[i] < array[j]) {
                int tmp = array[i];
                array[i] = array[j];
                array[j] = tmp;
     }}}*/
    //****************这样每次比较后都交换元素位置**********
    for (int i= 0;i<cnt-1;i++){
        for (int j=i + 1;j<cnt;j++){
            if(array[i]<array[j]){
                int tmp=array[i];
                array[i]=array[j];
                array[j]=tmp;
            }
        }
//    }
//*****************这样每次比较只记住索引,内循环遍历一次完成后再交换(减少交换次数),*********
    for (int i = 0; i < cnt - 1; i++) {
        int tmp = 0;
        for (int j = i + 1; j < cnt; j++) {
            if (array[i] < array[j]) {
                tmp = j;
            }
            int c = array[i];
            array[i] = array[tmp];
            array[tmp] = c;
        }
    }
    /* 冒泡排序 */
    for (int i = 0; i < cnt - 1; i ++) {
        for (int j = 0; j < cnt - i - 1; j ++) {
            if (array[j] < array[j + 1]) {
                int tmp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = tmp;
            }
        }
    }
}
void showArray(int array[],int cnt)
{
    for (int i = 0; i<cnt; i++) {
        printf("%d ",array[i]);
    }
    printf("\n");
}

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        
        // insert code here...
//        NSLog(@"Hello, World!");
//
        int array[10] = {0};
        initArray(array, 10);
        showArray(array,10);
        selectSortForArray(array, 10);
        showArray(array,10);
        
        // C-实现 插空排序
        int  a[5]={9,8,10,2,20};
        int key,j;// key为每次被拿出的值(也就是初始提供“空”的值),j为要比较到的最大索引
        for (int i=1; i<5; i++) {// 直接插入排序
            key=a[i];// 取出当前要比较项
            for (j=i-1; j>=0&&a[j]>key; j--) {// 和直到索引j位置的元素逐一比较
                a[j+1]=a[j];// j为更新出来的新空(但是只要进了循环,此次循环结束就会进行一次j--操作,所以下面要+1)
            }
            a[j+1]=key;// j+1为最后留给key的空
        }
        for (int i=0; i<5; i++) {
//            NSLog(@"%i",a[i]);
        }
        // OC实现
//        NSMutableArray *array=[NSMutableArray arrayWithObjects:@9,@8,@10,@2,@20, nil];
//        id key;
//        NSInteger j;
//        for (NSInteger i=1; i<array.count; i++) {
//            key=[array objectAtIndex:i];//取到每一个待插入的数据,从a[1]开始查找
//            for (j=i-1; j>=0&&array[j]>key; j--) {
//                // 如果之前的数比key大,就将这个数向后移动一个位置,留出空来让key插入就像整牌一样
//
//                [array exchangeObjectAtIndex:j+1 withObjectAtIndex:j];//交换
//            }
//            [array replaceObjectAtIndex:j+1 withObject:key];
//        }
//        for (key in array) {
//            NSLog(@"%@",key);
//        }
        printf("\n");
    }
    return 0;
}

相关文章

  • Python知识点:常见算法的python实现

    提到排序算法,常见的有如下几种:冒泡排序、选择排序、插入排序、快速排序、堆排序、归并排序、希尔排序;查找算法最常见...

  • 实现几种常见排序方法

    Java实现几种常见排序方法 日常操作中常见的排序方法有:冒泡排序、快速排序、选择排序、插入排序、希尔排序,甚至还...

  • 冒泡排序算法(C语言)

    排序(冒泡排序算法) 本专题将总结数据结构中几种常见的基本排序方法(后续的几种排序方法将会在整理后发布),意图将计...

  • 几种常见的排序

    1.选择排序 比较后,符合条件每次都进行交换。 2.冒泡排序 3.插空排序 代码解析见注释。 整体测试代码

  • 几种常见的排序

    排序 假设含有n个记录的序列列为(r1,r2,.....,rn). 其相应的关键字分别为{k1,k2,.........

  • 几种常见的排序

    大家好,我是猿二哥,今天我想和大家一起分享一下我最近的学习数据结构的心得,那好现在咱们从最简单的数据结构的排序算法...

  • 常用排序算法实现

    1、常见排序算法大致有以下几种:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序2、各种排序算法...

  • 【比较类排序算法】冒泡排序、选择排序、快速排序、插入排序、希尔排

    常见的经典比较类排序算法有冒泡排序、选择排序、快速排序、插入排序、希尔排序。这几种排序中快速排序和希尔排序的平均时...

  • 插入排序

    插入排序也是一类非常常见的排序方法,它主要包含直接插入、折半插入和Shell排序等几种常见排序方法。 直接插入排序...

  • 开发者应该掌握的几种排序算法

    该篇文章主要介绍了算法基础以及几种常见的排序算法:选择排序、插入排序、冒泡排序、快速排序、堆排序。 一、算法基础 ...

网友评论

      本文标题:几种常见的排序

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