C语言中数组的各种排序
数组排序
冒泡排序
思路解析
-
相邻的元素两两比较,大的放右边,小的放左边(从大到小则反之)
-
第一轮比较完毕之后,最大(小)值就已经确定,第二轮可以少循环一次,后面以此类推
-
如果数组中有n个数据,总共我们只要执行n-1轮的代码就可以
代码案例
#include<stdio.h> int main() {int arr[] = {9,7,6,4,2,3,1,5,8};int length = sizeof(arr) / sizeof(arr[0]);int i,j,num;//外循环,要进行多少轮排序,有多少元素,就要进行多少轮for(j=0;j<length;j++) {//内循环,将元素两两比较,然后按需交换位置,//i<length-1-j//length是数组中的元素个数,//-1是因为两两比较,n个数只需要对比n-1次就可以确定最大(小)值,同时也避免因为下面的i+1导致代码错误//-j是优化代码效率,每进行一轮对比,就确定了一个元素的位置,所以下一次循环就可以少对比一个for(i=0;i<length-1-j;i++) {//比较两个相邻元素的大小if(arr[i] > arr[i+1]){num = arr[i]; //num保存当前arr[i]的值arr[i] = arr[i+1]; //将arr[i+1]的值赋给arr[i]arr[i+1] = num; //将保存的arr[i]的值赋给arr[i+1]}}}for(i=0;i<length;i++) //遍历数组{printf("%d",arr[i]);}return 0; }
选择排序
思路解析
从0索引开始,拿着每一个索引上的元素跟后面的元素依次比较小的放前面,大的放后面,以此类推
代码案例
#include<stdio.h> int main() {int arr[] = {3,5,2,1,4};int length = sizeof(arr) / sizeof(arr[0]);int i,j,num;//外循环,j就是当前拿出的索引for(j=0;j<length;j++) {//内循环,当前索引对应的元素依次与后面的元素进行比较,循环长度-1次//i就是j后面每一个索引for(i=j+1;i<length-1;i++){if(arr[j] > arr[i]){num = arr[j];arr[j] = arr[i];arr[i] = num;}}}for(i=0;i<length;i++){printf("%d",arr[i]);} }