本文主要是介绍一日一码01——冒泡排序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一切成功都源于积累!
为痛下决心要改掉眼高手低的毛病,每天一道算法题!
先从最简单的冒泡排序开始吧。
//冒泡排序 2013/09/06
//从小到大排序#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <malloc.h>//每次把最后的数向前比较,小的数从后往前“冒泡”,下次比较仍从最后比起,前面已排序部分无需比较
void soapSort(int* a, int n){int i,j,tmp,flag;for ( i = 0 ; i < n ; i++){flag = 0;for ( j = n - 1 ; j > i ; j-- ){if(a[j] < a[j-1]){tmp = a[j];a[j] = a[j-1];a[j-1] = tmp;flag = 1;}}if(flag == 0){return;} }
}//每次把前面的数向后比较,大的数从前往后“冒泡”,下次比较仍从前面比起,后面已排序部分无需比较
void soapSort2(int* a, int n){int i,j,tmp,flag;for ( i = 0 ; i < n ; i++){flag = 0;for ( j = 0 ; j < n-i-1 ; j++ ){if(a[j] > a[j+1]){tmp = a[j];a[j] = a[j+1];a[j+1] = tmp;flag = 1;}}if(flag == 0){return;} }
}//错误方法,只是每次把最大的放到最后,前面的数实际上没有排序
void soapSort_error(int* a, int n){int i,j,tmp,flag;for ( i = 0 ; i < n ; i++){flag = 0;for ( j = i ; j < n - 1; j++ ){if(a[j] > a[j+1]){tmp = a[j];a[j] = a[j+1];a[j+1] = tmp;flag = 1;}}if(flag == 0){return;}}
}int initArr(int** a){int i,n;srand(time(NULL));printf("Input the size of array:");scanf("%d",&n);*a = (int *)malloc(n*sizeof(int));for(i = 0; i < n; i++){(*a)[i] = rand()%100; //*(*a+i) = rand()%100;}return n;
}void printArr(int* a, int n){int i;for (i = 0;i < n; i++){printf("%d,",a[i]);}printf("\n");
}void main(){int* arr;int n;n = initArr(&arr);//传地址printArr(arr,n);soapSort(arr,n);printArr(arr,n);}
这篇关于一日一码01——冒泡排序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!