数据结构内排序算法 C语言描述(带注释)

插入排序

//插入排序 
void charupaixu(int inputArray[],int length){
	int i,j;
	int thisArray[length];//用来存接受的数组,以不更改原数组 
	for(i = 0;i<length;i++){
		thisArray[i]= inputArray[i];
	}
	//算法正式开始 
	int temp;//用来保存当前被插入元素
	for(i = 1;i<length;i++){
		
		temp = thisArray[i];
		j = i-1;
		while(j>=0 && thisArray[j]>temp){//核心 
			thisArray[j+1] = thisArray[j];//冒泡 
			j--; 
		}
		thisArray[j+1] = temp;
	} 
	//打印 
	printf("插入排序后:");
	int num;
 	for(num = 0;num<length;num++){
 		printf("%d,",thisArray[num]);
	}
	printf("\n");
} 

选择排序

//选择排序
void xuanzepaixu(int inputArray[],int length){
	int i,j,minlocation;
	int thisArray[length];//用来存接受的数组,以不更改原数组 
	for(i = 0;i<length;i++){
		thisArray[i]= inputArray[i];
	}
	//算法正式开始 
	int min;
	int temp;//用于元素交换 
	for(i=0;i<length;i++){
		min = thisArray[i];
		j = i;
		while(j<length){//求后排的最小元素 
			if(thisArray[j]<min){
				//如果发现最小元素,则更新最小元素的值和位置 
				min = thisArray[j];
				minlocation = j;
			}
			j++;//配合while 
		}
		if(thisArray[i]>min){//如果后面的最小值小于前面,则交换 
			temp = thisArray[i];
			thisArray[i] = min;
			thisArray[minlocation] = temp;
		}
	} 
	//打印 
	printf("选择排序后:");
	int num;
 	for(num = 0;num<length;num++){
 		printf("%d,",thisArray[num]);
	}
	printf("\n");
} 

冒泡排序

//冒泡排序 
void maopaopaixu(int inputArray[],int length){
	int i,j,temp;
	int thisArray[length];//用来存接受的数组,以不更改原数组 
	for(i = 0;i<length;i++){
		thisArray[i]= inputArray[i];
	}
	//算法正式开始 
	for(i=0;i<length-1;i++){
		for(j=0;j<length-1-i;j++){//注意j的条件,因为后排是有序数组,前排无序 
			if(thisArray[j]>thisArray[j+1]){
				temp = thisArray[j+1];
				thisArray[j+1] = thisArray[j];
				thisArray[j] = temp;
			}
		}
	}
	//打印 
	printf("冒泡排序后:");
	int num;
 	for(num = 0;num<length;num++){
 		printf("%d,",thisArray[num]);
	}
	printf("\n");
} 

以下为总代码:

#include <stdio.h>

void charupaixu(int inputArray[],int length);
void xuanzepaixu(int inputArray[],int length);
void maopaopaixu(int inputArray[],int length);

int main(int argc, char** argv) {
	int arr[] = {1,47, 2, 0, 4, 7, 98, 0, 12, 35, 99, 14}; 
 	int length = sizeof(arr)/sizeof(arr[0]);
 	
 	
 	//查看原数组 
 	printf("原数组为:");
 	int i;
 	for(i = 0;i<length;i++){
 		printf("%d,",arr[i]);
	}
	printf("\n");
	printf("长度为:%d\n",length);
	
	charupaixu(arr,length);
	xuanzepaixu(arr,length);
	maopaopaixu(arr,length);
}

//插入排序 
void charupaixu(int inputArray[],int length){
	int i,j;
	int thisArray[length];//用来存接受的数组,以不更改原数组 
	for(i = 0;i<length;i++){
		thisArray[i]= inputArray[i];
	}
	//算法正式开始 
	int temp;//用来保存当前被插入元素
	for(i = 1;i<length;i++){
		
		temp = thisArray[i];
		j = i-1;
		while(j>=0 && thisArray[j]>temp){//核心 
			thisArray[j+1] = thisArray[j];//冒泡 
			j--; 
		}
		thisArray[j+1] = temp;
	} 
	//打印 
	printf("插入排序后:");
	int num;
 	for(num = 0;num<length;num++){
 		printf("%d,",thisArray[num]);
	}
	printf("\n");
} 

//选择排序
void xuanzepaixu(int inputArray[],int length){
	int i,j,minlocation;
	int thisArray[length];//用来存接受的数组,以不更改原数组 
	for(i = 0;i<length;i++){
		thisArray[i]= inputArray[i];
	}
	//算法正式开始 
	int min;
	int temp;//用于元素交换 
	for(i=0;i<length;i++){
		min = thisArray[i];
		j = i;
		while(j<length){//求后排的最小元素 
			if(thisArray[j]<min){
				//如果发现最小元素,则更新最小元素的值和位置 
				min = thisArray[j];
				minlocation = j;
			}
			j++;//配合while 
		}
		if(thisArray[i]>min){//如果后面的最小值小于前面,则交换 
			temp = thisArray[i];
			thisArray[i] = min;
			thisArray[minlocation] = temp;
		}
	} 
	//打印 
	printf("选择排序后:");
	int num;
 	for(num = 0;num<length;num++){
 		printf("%d,",thisArray[num]);
	}
	printf("\n");
} 

//冒泡排序 
void maopaopaixu(int inputArray[],int length){
	int i,j,temp;
	int thisArray[length];//用来存接受的数组,以不更改原数组 
	for(i = 0;i<length;i++){
		thisArray[i]= inputArray[i];
	}
	//算法正式开始 
	for(i=0;i<length-1;i++){
		for(j=0;j<length-1-i;j++){//注意j的条件,因为后排是有序数组,前排无序 
			if(thisArray[j]>thisArray[j+1]){
				temp = thisArray[j+1];
				thisArray[j+1] = thisArray[j];
				thisArray[j] = temp;
			}
		}
	}
	//打印 
	printf("冒泡排序后:");
	int num;
 	for(num = 0;num<length;num++){
 		printf("%d,",thisArray[num]);
	}
	printf("\n");
} 



猜你喜欢

转载自blog.csdn.net/qq_30154571/article/details/91447429