jake1036

插入排序算法详解

                      插入排序

  算法思想:
      每次从数组的第j个位置往前扫描,若a[j-1] > a[j] ,则将a[j-1]移到现在j 的位置上,每次重复循环,直到j变为0。.
  算法实现如下:
     

#include <iostream>
/*
  插入排序算法 
*/

using namespace std ;
void sort(int * a , int n) ;
 
 
int  main()
 
{
   
int a[] = {3 ,51 ,1 , 4456 ,22} ;  
   
   sort(a , 
6) ;
   
   
for(int i = 0 ; i < 6 ; i++)
     cout
<<a[i]<<" " ;
     
     
     cin.
get() ;
   
return 0 ;     
 }

 
 
  
void sort(int * a , int n)
 
{
       
int i , j ;
      
for( i = 0 ; i < n ; i++)
      
{
         
int t = a[i] ;     
         
for( j = i ; j > 0 && t < a[j-1]; j--)  //注意循环结束条件,中的a[j] < a[j-1] ,可以减少循环次数 
         
                a[j] 
= a[j - 1] ; 
         }

           a[j] 
= t ;   
      }

      
 }
  



  2 快速排序
    算法实现如下:

   

/*
 快排算法 
*/
 
#include 
<iostream>
using namespace std ;
 inline 
void Swap(int &x , int &y) ;
 
void qSort(int * a , int , int n) ;

 
int main()
 
{
   
int a[] = {3 ,51 ,1 , 4456 ,22} ;  
   
   qSort(a , 
0 , 6) ;
   
   
for(int i = 0 ; i < 6 ; i++)
     cout
<<a[i]<<" " ;
     
     
     cin.
get() ;
     
return 0 ;
 }



 inline 
void Swap(int &x , int &y) 
  
{
       
int temp = x ;
       x 
= y ;
       y 
= temp ;        
  }


 
void qSort(int * a , int l , int n)
 
{
    
int i = l , j = n;  
    
int x = a[l] ;
    
if(i >= j)
      
return ;
    
    
while(i < j)
    

      
while(a[++i] < x && i < n) ;
      
while(a[--j] > x && i < j) ;
       
if(i > j)
         
break ;
       Swap(a[i] , a[j]) ;  
              
    }
  
    Swap(a[j] , a[l]) ;  
      
    qSort(a , l , j 
- 1) ;  
    qSort(a , j 
+ 1 , n) ; 
 }





 

posted on 2011-03-13 16:28 kahn 阅读(319) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理