c语言 冒泡,插入,选择排序
冒泡排序
//冒泡排序 /* 每两个数之间做比较:较大的数放到右边,循环下去;就能够把最大的数字换到数组最后面 然后数组长度-- 再两个数之间作比较。。。。。 */ void bubble(int a[],int n) { for(int i=0;i<n-1;i++)//注意a[n-1]为数组的最后一项,没有数字和他做比较,故i<n-1 { if(a[i]>a[i+1]) a[i]=a[i]+a[i+1]-(a[i+1]=a[i]); } } void bubbleSort(int a[],int n) { while(n>0) bubble(a,n--); } int main(){ int a[7]={7,2,1,3,6,5,4}; int n=7; bubbleSort(a,n); for(int i=0;i<n;i++) printf("%d\t",a[i]); }
选择排序
//选择 /* 选择排序就像是军训的时候按高矮个站队: 先在数组中挑出一个最高个和队伍最后面的同学换位置 然后排除最高个 再在剩余的同学里面挑最高个和倒数第二个交换 然后再排除最高个和次高个 再在剩余的同学里面挑最高个和倒数第三个交换 。。。。。。 */ int selectPos(int a[],int n) { int pos=0; int max=a[0]; for(int i=0;i<n;i++) { if(max<a[i]) { max=a[i]; pos=i; } } return pos; } void selectionSort(int a[],int n) { while(n>0) { int pos=selectPos(a,n); a[n-1]=a[pos]+a[n-1]-(a[pos]=a[n-1]); n--; } } int main(){ int a[7]={7,2,1,3,6,5,4}; int n=7; selectionSort(a,n); for(int i=0;i<n;i++) printf("%d\t",a[i]); }
插入排序
//插入排序 /* 插入排序就像是你在斗地主: 当你抽到一张牌的时候,自然就需要往你现在的牌堆里面插入:方便你下一步打顺子 比如你抽到5的时候,自然就会往小于6的数字的位置放 这是一个总体的思想,现在开始拆分插入的过程: 首先明确:当数组中有1个数的时候是不需要排序的,所以for循环是从1开始的 (也就是对两个以上的数排序) 设当前接收到的数组的最后一个数字位key,拿数组中每一个数字和key作比较,当发现有小于 key的关键字时,就往数组里面插入 */ void insert(int a[],int n) { int key=a[n]; while(a[n-1]>key) { a[n]=a[n-1]; n--; if(n==0) a[n]=key; } a[n]=key; } void insertSort(int a[],int n) { for(int i=1;i<n;i++)//当数组中只有一个数时,默认有顺序的 insert(a,i); } int main(){ int a[7]={7,2,1,3,6,5,4}; int n=7; insertSort(a,n); for(int i=0;i<n;i++) printf("%d\t",a[i]); }