1.创建数组,存放一组数组
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
2.求出数组大小(以便更好的去进行排序次数)
int sz = sizeof(arr) / sizeof(arr[1]);
//sizeof(arr)求出整个数组的大小除以sizeof(arr[1])也就是单个元素的大小
//最终除以出来的就是元素个数
3.用循环的方法,来逐个判断大小并看是否要交换
int i = 0; int j = 0; for(i = 0 ; i < sz-1 ;i++) { for(j = 0 ;j < sz-1 ;j++) { if(arr[j] > arr[j+1]) { int temp = arr[j+1]; arr[j+1] = arr[j]; arr[j] = arr[j+1]; } } }
sz表示的数组大小
第一个循环是为了保证当数组内容为10,9,8,7,6,5,4,3,2,1
这种情况
第二个循环这是保证10,9,8,7,6,5,4,3,2,1中的10他可以顺利的到最后(9次即可)故sz-1
下面是总代码
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { int arr[10] = { 7,2,0,4,6,8,1,9,3,5 }; int sz = sizeof(arr) / sizeof(arr[0]) ; int i = 0; int j = 0; for (i = 0; i < (sz - 1); i++)// { for (j = 0; j < sz - 1 - i; j++) { if (arr[j] >= arr[j + 1]) { int tmp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tmp; } } } for (i = 0; i < sz ; i++) { printf("%d", arr[i]); } return 0; }
上面这种方法虽然可以顺利的完成任务,but当数组内容是 0,1,2,3,4,5,6,7,8,9时,他仍需要再循环9*9次才能跳出,故现在需要一个判断条件当他们已经排好了就跳出
此处可以利用一个数,当第二个循环直接没有进去时就说明已经排好了:因为第二个循环中当if判断第一个arr[j]不大于arr[j+1]时 j仍会增加 去判断arr[j+1] 是否大于 arr[j+2] ....当全部都不用交换时就说明已经排好了 , 所以我们可以再这if语句中将这个数赋值成一个数,当这数仍等于我们初始化的就说明没有进入if里也就是已经排好了,可以跳出了。
下面直接上代码
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { int arr[10] = { 0,4,2,3,1,5,6,7,8,9 }; int sz = sizeof(arr) / sizeof(arr[0]) ; int i = 0; int j = 0; for (i = 0; i < (sz - 1); i++)// { int count = 0;//数 for (j = 0; j < sz - 1 - i; j++) { if (arr[j] >= arr[j + 1]) { int tmp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tmp; count = 1;//赋值 } } if (count != 1) { break; } } for (i = 0; i < sz ; i++) { printf("%d", arr[i]); } return 0; }