排序算法

本文提出了一种新的内部排序算法,通过两两比较及错位比较实现序列排序,旨在优化现有算法的时间与空间复杂度。该算法适用于内存排序场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   通过对数据结构的学习,是我知道的算法是什么,到底有什么用途。前些日子我在看排序时,我深刻了内部排序的全过程,同时我也产生了一些自己对排序的新想法。

       内部排序的全部过程都是在 内存中进行的。因此看一个排序算法的好坏,不仅要看它的时间复杂度,也要看它的空间复杂度。众所周知,按排序策略的不同可以将内部排序划分为简单排序,希尔排序,快速排序,归并排序,堆排序等。这写出的这些排序方法都是些常见而且也比较出名的算法。

       但是在我看来这写算法都不不如我想出来的算法好。呵呵,希望大家见量,也许你觉得我说的有点夸张了,不过如果你理会了我的想法之后也许就不会这磨想了,好了废话少说直接入题吧。

       我的基本思想是:将整个待排序序列,两两比较进行排序,然后进行错位比较排序,以达到整个序列有序的目的。

       也许你感觉这段文字不好理解,不要紧看看下面的图解,你就会明白的

下面是将其排为一个递增序列:

 

待排序序列

6

5

1

3

8

0

1

5

6

1

3

0

8

{2}

5

1

6

0

3

8

3`

1

5

0

6

3

8

4

1

0

5

3

6

8

5

0

1

3

5

6

8

红色的数字是开始交换的首数字,这样就成为了有序序列

下面我们来看看它与其它排序方法进行比较:

名称

时间复杂度

空间复杂度

简单排序

ON2

O1

希尔排序

ONlogN

O1

归并排序

ONlog N

ON

快速排序

ON

ON

堆排序

ONlog N

O1

我的排序方法

ONlog N

O1

算法实现:

      

       do{

              flag[1]=0;

              t=t%2;    //为了实现错位

              for(int i=t;i<10;i=i+2)

                     if(a[i]>a[i+1])

                     {     int temp;

                            temp=a[i];

                            a[i]=a[i+1];

                            a[i+1]=temp;

                            flag[1]=1;//用于设置标志

                     }

                     t++;

              flag[2]=flag[1];

       }while(flag[1]!=0||flag[2]!=0);

如果感觉这个比较复杂请看看下面的分解算法:

do{

              flag1=0;

              flag2=0;

              for(int i=0;i<10;i=i+2)

                     if(a[i]>a[i+1])

                     {     int temp;

                            temp=a[i];

                            a[i]=a[i+1];

                            a[i+1]=temp;

                            flag1=1;

                     }

              if(a[0]>a[9])

                     {     int temp;

                            temp=a[0];

                            a[0]=a[9];

                            a[0]=temp;

                            flag1=1;

                     }

              for(int j=1;j<10;j=j+2)

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

                     {     int temp;

                            temp=a[j];

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

                            a[j+1]=temp;

                            flag1=1;

                     }

       }while(flag1!=0||flag2!=0);

好了,请大家给给意见。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值