c语言关于数组排序法和插入一个数的详细讲解

1.选择排序法

现在有这样一个数组:int a[10]={6,1,4,5,7,8,9,2,3,10};

                                                a[0],a[1]      ,,,,,      a[9]

方法思路就是,我们先让a[0]去依次和它后面的单元比较,也就是让a[0]依次和 a[1]到a[9] 进行比较.比较完之后,1.我们希望能得到最小值的那个单元的下标,2.然后将这个数组单元与a[0]的值进行交换,最终结果就会让a[0]是这一组数的最小值。然后第二次循环就是从a[1]开始逐一与a[2]到a[9]比较.........

关于1.的程序要怎么写:

for(i=0;i<9;i++){
		k=i;
		for(j=i+1;j<10;j++){
			if(a[k]>a[j]){
				k=j;
			}
        }

我们先从a[0]看起,其实这里的k是最小值的下标的意思,我们先让这个最小值下标k为0,然后进入循环,如果a[k]后面的值比a[k]小,那么k就是这个更小的数组的下标。这个跟找最小值的方法是一样的。

2.的程序,则是再判断完k的取值后进行的

for(i=0;i<9;i++){
		k=i;
		for(j=i+1;j<10;j++){
			if(a[k]>a[j]){
				k=j;
			}
		}
		if(k!=i){
			t=a[i];
			a[i]=a[k];
			a[k]=t;
		}
	}

最后就是遍历这个数组输出整个数组

以下是完整代码

//选择排序法
#include

int main(){
	int a[10]={6,1,4,5,7,8,9,2,3,10};
	int i,j,k,t;
	for(i=0;i<9;i++){
		k=i;
		for(j=i+1;j<10;j++){
			if(a[k]>a[j]){
				k=j;
			}
		}
		if(k!=i){
			t=a[i];
			a[i]=a[k];
			a[k]=t;
		}
	}
	for(i=0;i<10;i++){
		printf("%d ",a[i]);
	}
	return 0;
}

2.在数组中插入一个数

int main(){
	int a[11]={1,3,4,7,8,13,16,24,43,57};//40
	int x,i;
	scanf("%d",&x);
	for(i=0;i<10;i++){
		if(x=i;k--){ //我们先要让后面的数整体向后移,为插入的数空出一个数
		a[k+1]=a[k];
	}
	a[i]=x;
	for(i=0;i<11;i++){
		printf("%d ",a[i]);
	}
	return 0;
}

你可能感兴趣的:(排序算法,算法)