随笔-167  评论-8  文章-0  trackbacks-0

 

//******************直接插入排序************************* 
#include <stdio.h> 
#include 
<stdlib.h> 
void InsertSort(int a[], int n)
       
int temp=0
       
for(int i=1; i!=n; ++i)
              
if(a<a)
                     temp 
= a; 
                     a 
= a; 
                     
int j=0
                     
for(j = i-2;(temp < a[j])&&(j>=0); --j) 
                            a[j
+1= a[j]; 
                     a[j
+1= temp; 
              }
 
       }
 
}
 
void main()
       
int a[] = {56,23,48,25,84,15,35,69,87,12,54,28,37,19,47,12}
       
int array_length=sizeof(a)/sizeof(*a); 
       InsertSort(a,array_length); 
       
for(int i = 0; i!=array_length; ++i) 
              printf(
"%d  ", a); 
}
 
//---------------------------------------------------------------------------- 
//*****************折半插入排序**************************** 
#include <stdio.h> 
#include 
<stdlib.h> 
void BInsertSort(int a[], int n)
       
int temp,low,high,mid; 
       
for(int i=1; i!=n; ++i)
              temp
=a; 
              low 
= 0
              high 
= i-1
              
while(low<=high)
                     mid
=(low + high)/2
                     
if(temp <a[mid]) 
                            high 
= mid - 1
                     
else 
                            low 
= mid + 1
              }
 
              
for(int j=i-1;j>=high+1;--j) 
                     a[j
+1]=a[j]; 
              a[high 
+ 1= temp; 
       }
 
}
 
void main()
       
int a[] = {56,23,48,25,84,15,35,69,87,12,54,28,37,19,47,12}
       
int array_length=sizeof(a)/sizeof(*a); 
       BInsertSort(a,array_length); 
       
for(int i = 0; i!=array_length; ++i) 
              printf(
"%d  ", a); 
}
 
//------------------------------------------------------------------------ 
//***********************希尔排序*********************** 
#include <iostream.h> 
void ShellInsert(int a[], int array_length,int dk)
       
int temp; 
       
for(int i = dk;i<=array_length;++i)
              
if(a<=a)
                     temp 
= a; 
                     
for(int j = i-dk; j>=0 && temp < a[j]; j -= dk) 
                            a[j 
+ dk] = a[j]; 
                     a[j
+dk]=temp; 
              }
 
       }
 
}
 
void ShellSort(int a[], int array_length_a,int dlta[],int array_length_dlta)
       
for(int k=0; k < array_length_dlta; ++k) 
              ShellInsert(a, array_length_a,dlta[k]); 
}
 
void main()
       
int a[]={56,23,48,25,84,15,35,69,87,12,54,28,37,19,47,12}
       
int array_length_a = sizeof(a)/sizeof(*a); 
       
int dlta[]={7,5,3,1,0}
       
int array_length_dlta = sizeof(dlta)/sizeof(*dlta); 
       ShellSort(a,array_length_a, dlta, array_length_dlta); 
       
for(int i = 0; i < array_length_a; ++i) 
              cout
<<a<<" "
}
 
//---------------------------------------------------------------------------- 
//***********************快速排序*********************** 
#include <iostream.h> 
int Partition(int a[], int low, int high)
       
int pivot, temp; 
       pivot 
= temp = a[low]; 
       
while(low < high)
              
while(low < high && a[high] >= pivot) 
                     
--high; 
              a[low] 
= a[high]; 
              
while(low < high && a[low] <= pivot) 
                     
++low; 
              a[high] 
= a[low]; 
       }
 
       a[low] 
= temp; 
       
return low; 
}
 
void QSort(int a[], int low, int high)
       
if(low < high)
              
int pivotloc = Partition(a, low, high); 
              QSort(a, low, pivotloc 
- 1); 
              QSort(a, pivotloc 
+ 1, high); 
       }
 
}
 
void QuickSort(int a[], int a_length)
       QSort(a, 
0, a_length-1); 
}
 
void main()
       
int a[]={56,23,48,25,84,15,35,69,87,12,54,28,37,19,47,12}
       
int array_length_a = sizeof(a)/sizeof(*a); 
       QuickSort(a, array_length_a); 
       
for(int i = 0; i < array_length_a; ++i) 
              cout
<<a<<" "
}
 
//---------------------------------------------------------------------------- 
//***********************冒泡排序*********************** 
#include <iostream.h> 
void BubbleSort(int a[], int n)
       
bool change = true
       
int tmp; 
       
for(int i=n-1;i>=1&&change;--i)
              change 
= false
              
for(int j=0; j < i;++j)
                     
if(a[j]>a[j+1])
                            tmp
=a[j]; 
                            a[j]
=a[j+1]; 
                            a[j
+1]=tmp; 
                            change 
= true
                     }
 
              }
 
       }
 
}
 
int main()
       
int a[]={56,23,48,25,84,15,35,69,87,12,54,28,37,19,47,12}
       
int array_length = sizeof(a)/sizeof(*a); 
       BubbleSort(a, array_length); 
       
for(int i=0; i!=array_length; ++i) 
              cout
<<a<< "  "
       
return 0
}
 
//---------------------------------------------------------------------------- 
//***********************简单选择排序*********************** 
#include <iostream.h> 
void SelectSort(int a[], int array_length)
       
for(int i=0; i != array_length; ++i)
              
int min=a; 
              
int index = i; 
              
for(int j=i; j != array_length; ++j)
                     
if(a[j] < min)
                     min
=a[j]; 
                     index 
= j; 
                     }
 
              }
 
              
if(i != index)
                     a 
= a + a[index]; 
                     a[index] 
= a - a[index]; 
                     a 
= a - a[index]; 
              }
 
       }
 
}
 
int main()
       
int a[]={56,23,48,25,84,15,35,69,87,12,54,28,37,19,47,12}
       
int array_length = sizeof(a)/sizeof(*a); 
       SelectSort(a, array_length); 
       
for(int i=0; i!=array_length; ++i) 
              cout
<<a<< "  "
       
return 0
}
 
//---------------------------------------------------------------------------- 
//******************堆排序************************* 
#include <iostream.h> 
void HeapAdjust(int a[], int s, int m)
       
int rc = a[s-1]; 
       
for(int j=2*s; j <= m; j *= 2)
              
if(j < m && a[j-1< a[j]) 
                     
++j; 
              
if(rc >= a[j-1]) 
                     
break
              a[s
-1= a[j-1]; 
              s
=j; 
       }
 
       a[s
-1= rc; 
}
 
void HeapSort(int a[], int array_length)
       
for(int i = array_length/2; i>0--i) 
              HeapAdjust(a, i, array_length); 
       
for(int j = array_length; j > 1--j)
              a[
0= a[0+ a[j-1]; 
              a[j
-1= a[0- a[j-1]; 
              a[
0= a[0- a[j-1]; 
              HeapAdjust(a, 
1, j-1); 
       }
 
}
 
int main()
       
int a[]={56,23,48,25,84,15,35,69,87,12,54,28,37,19,47,12}
       
int array_length = sizeof(a)/sizeof(*a); 
       HeapSort(a, array_length); 
       
for(int i=0; i!=array_length; ++i) 
              cout
<<a<< "  "
       
return 0
}
 
//------------------------------------------------------------- 
//***********************归并排序*********************** 
void merge(int a[],int low,int middle,int high)
{
    
int h,i,j,k;
    
int b[20];
    h
=low;
    i
=low;
    j
=middle+1;
    
while(h<=middle&&j<=high){
              
if(a[h]<=a[j]){
            b
=a[h];
            h
++;
              }

              
else{
                     b
=a[j];
                     j
++;
        }

        i
++;
    }

    
if(h>middle)
    
for(k=j;k<=high;k++){
              b
=a[k];
              i
++
    }

    
else{
              
for(k=h;k<=middle;k++){
                     b
=a[k];
                     i
++;
        }

    }

    
for(k=low;k<=high;k++)
       
{
              a[k]
=b[k];
    }

}


//归并排序函数的具体实现
void mergesort(int a[],int low,int high)
{
    
int middle;
    
if(low<high){
              middle
=(low+high)/2;
        mergesort(a,low,middle);
        mergesort(a,middle
+1,high);
        merge(a,low,middle,high);
    }

}


int main(){
       
int a[]={56,23,48,25,84,15,35,69,87,12,54,28,37,19,47,12};
       
int array_length_a = sizeof(a)/sizeof(*a);
       
int b[]={0,0};
       
int array_length_b = sizeof(b)/sizeof(*b);
       mergesort(a,
0,15);
       
for(int i=0; i!=array_length_a; ++i)
              cout
<<a<< "  ";
       cout
<<endl;
       
return 0;
}
 //------------------------------------------------------------- 
posted on 2009-07-19 11:18 老马驿站 阅读(160) 评论(0)  编辑 收藏 引用 所属分类: c++