原创排序算法与快速排序算法时间复杂度相同,但更易理解(C++语言实现)

     本人近日要写一个排序算法,需要考虑算法的性能。原来计划使用快速排序算法,在网上找到的快速算法都不易理解,于是就写了如下算法。算法的原理如下:

1.判断数组元素数量的奇偶性,用于判断数组的中间分隔;

2.定义两个变量用来存放临时最大值和最小值的下标,定义两个变量用当前区域最大值和最小值的下标;

3.在主循环体中找到最大值和最小值,分别与放置到最后或最前交换,下一次循环前去除头和尾,计算剩余值的最大值和最小值,与当前最后或最前交换...,直到计算到数组的中间为止。算法时间复杂度为=n/2 * (n-1) *(n-3)* (n-5)*.....*3或2 。有意见问题或是问题请联系我tonmy1999@126.com

#include "stdafx.h"
#include <iostream.h>

void Sort(int* pSort,int iLen);
void Swap(int* Num1,int* Num2);
void PrintInt(int* pSort,int iLen);

int a[10]={9,8,5,6,4,7,2,0,3,1};
int main(int argc, char* argv[])
{
 cout<< "Old Array is:";
 PrintInt(a,10);

 Sort(a,10);

 cout<< "New Array is:";
 PrintInt(a,10);
 return 0;
}

void Sort(int* pSort,int iLen)
{
 //1.判断数组元素数量的奇偶性,用于判断数组的中间分隔;
 int iSpace=0;
 if (1 == (iLen%2))
  iSpace=2;
 else
  iSpace=1;

 int iMax,iMin,iCurMax,iCurMin;
 iMax=iLen-1;
 iMin=0;
 
 while((iMax-iMin) >= iSpace)
 {
  iCurMax=iMax; //临时最大初始化
  iCurMin=iMin; //临时最小初始化

  if(pSort[iMin] > pSort[iMax]) //初始比较
   Swap(&pSort[iMin],&pSort[iMax]);

  for(int i=iMin;i< iMax;i++)
  {
   if(pSort[i+1] < pSort[iMin]) //得到当前最小值的下标
    iCurMin=i+1;
   if(pSort[i] > pSort[iMax])   //得到当前最大值的下标
    iCurMax=i;
  }
  Swap(&pSort[iMin],&pSort[iCurMin]); //交换当前的最小值
  Swap(&pSort[iMax],&pSort[iCurMax]); //交换当前的最大值

  iMin++;
  iMax--;
 }

}

void Swap(int* Num1,int* Num2)
{
 int iTemp=*Num1;
 *Num1=*Num2;
 *Num2=iTemp;
}

void PrintInt(int* pSort,int iLen)
{
 cout << pSort[0];
 for(int i=1;i<iLen;i++)
 {
  cout << "--";
  cout << pSort[i] ;  
 }
 cout << endl;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值