插入排序
算法思想:
每次从数组的第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 , 44, 56 ,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 , 44, 56 ,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) ;
}