// 数组排序
/*
数组排序:
数组中存放的是数据,如同随机数一样,数组里的数据是无序的但是很多情况下我们都需要一组有序的数据,这个时候就用到了排序
常见的排序方法:
1 冒泡排序--(入门级的排序算法)
2 选择排序--(相对来说性能好点)
3 快速排序--(面试最常出的题)
4 其他的,例如,基数排序,计数排序,桶排序,堆排序,哈希排序。。。。。可以搜索(13种排序详解)舞动的排序
冒泡排序:
实现思路:从左到右,执行多次循环,每次循环,也是从左到右,每次比较相邻两个数之间的大小,如果需要交换(是否从大到小),就执 行交换
用代码书写冒泡排序?
举个例子,找规律
9 7 14 3
第一趟
第一次;7 9 14 3
第二次:7 9 14 3
第三次:7 9 3 14
第二趟
第一次:7 9 3 14
第二次:7 3 9 14
第三趟
第一次:3 7 9 14
一共四个数,一共比较了三遍,每趟比较了 4-趟数
*/
//冒泡
int main() {/*
int arr[] = { 9 , 4 , 13 , 5}; //定义一个数组
for (int i = 0; i < 4 - 1; i++) { //确定有几趟
for (int j = 0; j < 4 - 1 - i; j++) { //确定对应的第 i 趟 的 第 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 < 4; i++) { //
printf("%d ",arr[i]); //输出交换后的数组
}
*/
冒泡的优化,减少次数的运行
int arr[] = {3,5,9,4,21,19,16,32};
for (int i = 0; i < 8-1; i++) {
printf("运行到第几趟%d\n",i);
BOOL flag = YES ; //给个BOOL类型,每趟都赋予YES
for (int j = 0; j < 8 - 1 -i; j++) {
if (arr[j] > arr[j+1]) {
int temp = arr[j] ;
arr[j] = arr[j+1] ;
arr[j+1] = temp ;
flag = NO ; //需要排序交换的赋予NO
}
}
if (flag == YES) {
break ; //当已不再需要交换的时候,break跳出循环
}
}
for (int i = 0; i < 8; i++) {
printf("%d ",arr[i]);
}
*/