基本排序算法(选择,冒泡,一般插入,二分插入)源码

 


#include 
<cstdlib>
#include 
<iostream>
#include 
<cassert>
using namespace std;

/* output array elements */
template 
<class T>
void Print(const T *inint n)
{
    
for (int i = 0; i < n; i++)
    
{
        cout 
<< in[i] << " ";
    }

    cout 
<< endl;
}


template 
<class T>
void Exch2Item(T &item1, T &item2)
{
    T temp 
= item1;
    item1 
= item2;
    item2 
= temp;
}
;

/* bubble sort algorithm */
template 
<class T>
void BubbleSort(T *input, int n)
{
    assert(input 
!= NULL);
    
for (int i = 0; i < n-1; i++)
    
{
        
for (int j = 0; j < (n - i - 1) ; j++)
        
{
            
if (input[j] > input[j + 1])
            
{
                Exch2Item(input[j], input[j 
+ 1]);
            }

        }

    }

}


/* select sort algorithm */
template 
<class T>
void SelectSort(T *input, int n)
{
    assert(input 
!= NULL);
    
for (int i = 0; i < n-1; i++)
    
{
        
for (int j = i + 1; j < n; j++)
        
{
            
if (input[i] > input[j])
            
{
                Exch2Item(input[j], input[i]);
            }
                
        }

    }

}

/* common insert sort algorithm */
template 
<class T>
void InsertSort(T *input, int n)
{    
    T temp;
    
for (int i = 1; i < n; i++)
    
{
        temp 
= input[i];
        
for (int j = 0; j < i; j++)
        
{
            
if (input[j] > temp)
            
{
                
break;
            }

        }


        
for (int k = i; k >= j+1; k--)
        
{
            input[k] 
= input[k - 1];
        }

        input[j] 
= temp;
    }

}

/* binary insert sort algorithm */
template 
<class T>
void BInsertSort(T *input, int n)
{    
    T temp;
    
int l, r, mid, k;
    
for (int i = 1; i < n; i++)
    
{
        temp 
= input[i];
        l 
= 0;
        r 
= i - 1;
        
while (l <= r)
        
{
            mid 
= (l + r) / 2;
            
if (input[mid] < temp)
            
{
                l 
= mid +1;
            }

            
else if (input[mid] > temp)
            
{
                r 
= mid -1;
            }

            
else
            
{
                k 
= mid;
                
break;
            }

        }

        
/* now l is the place to insert, move forward the elements between l and i*/
        
for (int j = i; j >= l+1; j--)
        
{
            input[j] 
= input[j - 1];
        }

        input[l] 
= temp;
    }

}


int main(int argc, char *argv[])
{
    
int a[] = {12431352780489};
    printf(
"%d "sizeof(a));
    BubbleSort(a, 
sizeof(a)/sizeof(int));
    SelectSort(a, 
sizeof(a)/sizeof(int));
    BInsertSort(a, 
sizeof(a)/sizeof(int));
    Print(a, 
sizeof(a)/sizeof(int));
    
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值