用冒泡排序,最多排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趟之后,返回最后数组 }