好久没写算法 感觉已经生疏了,重新开始写一些。先从简单的开始
冒泡排序和选择排序:选择排序只有找到最小(大)项才交换
void bubble_sort(int array[],int length){
for(int i=0;i<length;i++){
for(int j=i+1;j<length;j++){
if(array[i]>array[j]){
int tmp=array[i];
array[i]=array[j];
array[j]=tmp;
}
}
}
}
void select_sort(int array[],int length){
if(NULL==array||0==length){
return;
}
for(int i=0;i<length;i++){
int value=array[i];
int index=i;
for(int j=i+1;j<length;j++){
if(array[j]<value){
value=array[j];
index=j;
}
}
array[index]=array[i];
array[i]=value;
}
}
插入排序:数据逐个插入到已经排好序的队列中的过程
void insert_sort(int array[],int length){
if(NULL==array||0==length){
return ;
}
for(int i=1;i<10;i++){
for(int j=i;j>0;j--){
if(array[j]<array[j-1]){
int tmp;
tmp=array[j];
array[j]=array[j-1];
array[j-1]=tmp;
}
}
}
}
希尔排序(归并):首先按照一个序列递减的方法逐渐进行排序。比如说有10个数据,我们按照序列5、3、1的顺序进行排序。首先是5,那么我们对1和6、2和7、3和8、4和9、5和10进行排列;第二轮是3,那么对数据1、4、7、10排列,再对2、5、8进行排列,以及3、6、9排列;第三轮就和冒泡排序一样了,以此对每个数据进行排列。它的优势就是让整个队列基本有序,减少数据移动的次数,从而降低算法的计算复杂度。
程序实现过程中,注意最终跳到冒泡排序时的逻辑。
void shell_sort(int array[],int length,int step){
if(NULL==array||0==length){
return;
}
for(;step>=1;step-=2){
for(int i=0;i<step;i++){
for(int j=i;j<length-step;j+=step){
if(array[j]>array[j+step]){
int tmp;
tmp=array[j];
array[j]=array[j+step];
array[j+step]=tmp;
}
}
}
if(step==2){
for(int i=0;i<10;i++){
for(int j=i+1;j<10;j++){
if(array[i]>array[j]){
int tmp;
tmp=array[i];
array[i]=array[j];
array[j]=tmp;
}
}
}
}
}
}