三种简单排序算法及实现(引用)

 

三种简单排序算法分别的冒泡法,选择排序法和插入法.

三种排序算法的最差运行效率都要达到O(n*n)

 

1冒泡排序法:

void bubbleSort(Type* arr,long len)/*bubble sort algorithm*/

{

       long i=0,j=0;/*iterator value*/

       assertF(arr!=NULL,"In bubble sort,arr is NULL/n");

       for (i=len;i>1;i--)

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

                     if(arr[j]>arr[j+1])swapArrData(arr,j,j+1);

}

从数组的后面位置开始,如果发现有比前面一个位置处的数更小的元素,则把交换这两个数的位置,形成一个类似轻的气泡在水中上升的排序过程.

 

 

2插入排序法:

void  insertSort(Type* arr,long len)/*InsertSort algorithm*/

{

       long i=0,j=0;/*iterator value*/

       Type tmpData;

       assertF(arr!=NULL,"In InsertSort sort,arr is NULL/n");

       for(i=1;i<len;i++)

       {

              j=i;

              tmpData=arr[i];

              while(tmpData<arr[j-1]&&j>0)

              {

                     arr[j]=arr[j-1];

                     j--;

              }

              arr[j]=tmpData;

       }

}

插入排序算法思路是:

假定这个数组的序是排好的,然后从头往后,如果有数比当前外层元素的值大,则将这个数的位置往后挪,直到当前外层元素的值大于或等于它前面的位置为止.这具算法在排完前k个数之后,可以保证a[1…k]是局部有序的,保证了插入过程的正确性.

 

 

3选择排序法:

void selectionSort(Type* arr,long len)

{

       long i=0,j=0;/*iterator value*/

       long maxPos;

       assertF(arr!=NULL,"In InsertSort sort,arr is NULL/n");

       for(i=len-1;i>=1;i--)

       {

              maxPos=i;

              for(j=0;j<i;j++)

                     if(arr[maxPos]<arr[j])maxPos=j;

              if(maxPos!=i)swapArrData(arr,maxPos,i);

       }

}

 

选择排序法的第一层循环从起始元素开始选到倒数第二个元素 , 主要是在每次进入的第二层循环之前 , 将外层循环的下标赋值给临时变量 , 接下来的第二层循环中 , 如果发现有比这个最小位置处的元素更小的元素 , 则将那个更小的元素的下标赋给临时变量 , 最后 , 在二层循环退出后 , 如果临时变量改变 , 则说明 , 有比当前外层循环位置更小的元素 , 需要将这两个元素交换 .
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值