排序

36 阅读2分钟

排序

排序:3,5,2,6,4

  1. 原顺序为{5,3,2,6,4}
  2. 交换数组中两个元素的值!
  3. 把下标为0的元素,和下标为1的元素交换一下位置,变为 {3,5,2,6,4}
#include <stdio.h>
int main(){
	
	int arr[5] = {5,3,2,6,4};
	
	int temp = arr[0]; // temp = 5;
	
	arr[0] = arr[1]; // arr[0] = 3;
	
	arr[1] = temp; // arr[1] = 5;
	 
	printf("%d",arr[0]);
	printf("%d",arr[1]); 
}

结果如下:

image.png

排序:2,3,4,5,6

通过比较相邻元素的大小,并交换,把最大的值放在数组的最后面。

第一次循环,把最大的值放到了最后面,再经过多次循环,依次把最大值放后面

#include <stdio.h>
int main(){
	
	int arr[5] = {5,3,2,6,4};
	
	for(int i=0;i<4;i++){
		for(int j = 0; j<4;j++){
			if(arr[j] > arr[j+1]){
				int temp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = temp;
			}
		} 
	}
	
	
	for(int i=0;i<5;i++){
		printf("%d",arr[i]);
	}
}

image.png

对随机五个数字排序

从键盘上输入5个数字,并对他们进行排序(从小到大排序),再打印输出。

#include <stdio.h>
int main(){
	// 类型 数组名[个数] 
	int arr[5];
	
	// 从键盘上输入5个数字
	for(int i=0;i<5;i++){
		scanf("%d",&arr[i]);
	} 
	
	for(int i=0;i<4;i++){
		for(int j = 0; j<4;j++){
			// 把大的放在后面 
			if(arr[j] > arr[j+1]){
				int temp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = temp;
			}
		}
	}
	printf("-----------------------\n");
	// 打印输出
	for(int i=0;i<5;i++){
		printf("%d\n",arr[i]);
	}	
}

image.png

对随机五个数字排序(进阶版)

从键盘上输入5个数字,并对他们进行排序(从小到大排序),再打印输出。

#include <stdio.h>
int main(){
	//从键盘上输入5个数,从小到大排序,输出 
	int arr[5];
	for(int i=0;i<5;i++){
		scanf("%d",&arr[i]);
	}
	// 通过一个for循环,比较相邻的两个元素,做交换
	// 把最大的元素换到数组的最后一个位置 
	for (int i=0;i<4;i++){
		// 假设没有交换
		int isSwitch = 0;
		 
		for(int j =0;j<4-i;j++){
			// j,j++
			if(arr[j]>arr[j+1]){ //做交换 
			int temp = arr[j];
			arr[j] = arr[j+1];
			arr[j+1] = temp;
			
			isSwitch = 1; //有交换 
		}
	}
	// 如果一次交换都没有发生,说明已经有序,就不用再循环 
	if(isSwitch == 0){
		break;
	}
		for(int k = 0;k<5;k++){
		printf("%d",arr[k]);
	}
	printf("\n");
	}
}