希尔排序和冒泡法和直接插入排序

希尔排序(引用http://t.csdnimg.cn/zVqeu

第一种

void shellsort2(int a[], int n)
{
	int j, gap;
	
	for (gap = n / 2; gap > 0; gap /= 2)
		for (j = gap; j < n; j++)//从数组第gap个元素开始
			if (a[j] < a[j - gap])//每个元素与自己组内的数据进行直接插入排序
			{
				int temp = a[j];
				int k = j - gap;
				while (k >= 0 && a[k] > temp)
				{
					a[k + gap] = a[k];
					k -= gap;
				}
				a[k + gap] = temp;
			}
}

第二种

void shellsort3(int a[], int n)
{
	int i, j, gap;
 
	for (gap = n / 2; gap > 0; gap /= 2)
		for (i = gap; i < n; i++)
			for (j = i - gap; j >= 0 && a[j] > a[j + gap]; j -= gap)
				Swap(a[j], a[j + gap]);
}

冒泡法(引用http://t.csdnimg.cn/yBflq

#include<stdio.h>
void Print(int array[],int len){
    for(int i=0;i<len;i++){
        printf("%d ",array[i]);
    }
} 
void BubbleSort(int array[],int len){
    int tem;
    //外层循环控制 排序的趟数 n个元素排序需要循环n-1次 【1】 
    for(int i=0;i<len-1;i++) {
        //内层循环控制比较的次数 n个元素第i趟比较n-i次 【2】
        for(int j=0;j<len-1-i;j++) {
            //比较相邻的元素大小 目的:将最大的元素选出到移动到最后 
            if(array[j]>array[j+1]){
                tem = array[j];
                array[j] = array[j+1];
                array[j+1] = tem;
            }
        }
    }
    printf("\n\n排序完成!\n"); 
} 
int main(){
    int array[] = {3,44,38,5,47,15,36};
    int len = sizeof(array) / sizeof(int);
    printf("原始序列为:\n");
    Print(array,len);
 
    BubbleSort(array,len);
    printf("\n排序后序列为:\n");
    Print(array,len);
}

直接插入排序(引用http://t.csdnimg.cn/e5Mgq

将整个排序过程看作n-1趟插入,先将序列中第1个记录看成是一个有序子序列,然后从第2个记录开始,逐个进行插入,直至整个序列有序。   

  

public void insert_Sort(int a[], int n)
	{
		int i, j;
		for(i= 1; i<= n-1; i++)
		{
			if(a[i]< a[i- 1])
			{
				int t= a[i]; //a[i]为要插入的元素
				for(j= i- 1; j>= 0 && a[j]> t; j--)
				{
					a[j+ 1]= a[j]; //当要插入的元素小于序列中的元素时,序列中的元素都要向后移动一位							
				}
				a[j+ 1]= t;
			}
		}
	}	

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值