题解 | #排序#
排序
http://www.nowcoder.com/practice/2baf799ea0594abd974d37139de27896
用冒泡排序,最多排n-1趟,每趟最多比较次数依次为为n-1,n-2,n-3,……3,2,1次
从后往前比较,遇到后数小于前数的,就把二者交换位置,否则指针前移继续比骄。
每趟初始都要设置一个标记,记录是否出现过交换。出现交换就改变标记值
如果某一趟中,没有出现交换,标记值未改变,可以判断已经排好序,收网。
int* MySort(int* arr, int arrLen, int* returnSize ) {
int i = 0, j = 0;
*returnSize = arrLen; //不写会报错,须指明返回数组的大小
for(i = 0; i<arrLen-1; i++){ //下标从0到i是排好序的,初始有序个数为0
int flag = 1; //每趟的标记
for(j = arrLen-1; j>i; j--) //从后往前比较,截至下标为i+1处
if(arr[j-1] > arr[j]){ //前数<后数时,交换三部曲
int tmp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = tmp;
flag = 0; //标记值改变
}
if(flag == 1)
return arr; //一趟下来,没有出现交换的,说明已排好序,收网
} //如果出现交换,就继续下一趟比较
return arr; //比较n-1趟之后,返回最后数组
}
爱玛科技公司福利 6人发布