冒泡排序,往两个方向泡,一个往小泡,一个网大泡
#include<stdio.h> #include<stdlib.h> #include<time.h> void bubble_sort(int *a,int n){ int temp; for(int i=0;i<n;i++) for(int j=0;j<n-i-1;j++){ if(a[j]>a[j+1]){ temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } void bubble_sort2(int *a,int n){ int temp; for(int i=1;i<n;i++){ for(int j=n-1;j>=i;j--){ //放到下面去,表示有多少个元素已经好了 if(a[j]<a[j-1]){ temp=a[j]; a[j]=a[j-1]; a[j-1]=temp; } } } } void main(){ int test[20]; srand(time(0)); for(int i=0;i<20;i++){ test[i]=rand()%100+4; printf("%d ",test[i]); } printf("\n"); bubble_sort2(test,20); for(int i=0;i<20;i++) printf("%d ",test[i]); }
#include <stdio.h> #include<stdlib.h> #include<time.h> void insert_sort(int *data,int n){ int j; int key; for(int i=1;i<n;i++){ j=i-1;//前面一个元素 key=data[i]; while(key<data[j]&&j>=0){ data[j+1]=data[j]; j--; } //跳出循环的时候是data[j]<key即data[i] //data[j]=data[i]; data[j+1]=key; } } void main(){ //random() srand((unsigned)time(0)); int test[20]; for(int i=0;i<20;i++){ test[i]=rand()%100; printf("%d ",test[i]); } printf("\n"); insert_sort(test,20); for(int i=0;i<20;i++) printf("%d ",test[i]); getchar(); getchar(); }
#include<stdio.h> #include<stdlib.h> #include<time.h> //划分元素,有两种方法 int partition(int * a,int p,int r){ int i=p-1; int key=a[r]; int temp; for(int j=p;j<r;j++){ if(a[j]<=key){ //侵占,小于key的元素增加,交换元素 i++; temp=a[j]; a[j]=a[i]; a[i]=temp; } } a[r]=a[i+1]; a[i+1]=key; return i+1; } void myquick_sort(int *a,int p,int r){ if(p<r){ int q=partition(a,p,r); myquick_sort(a,p,q-1); myquick_sort(a,q+1,r); } } void main(){ int test[100]; srand(time(0)); for(int i=0;i<30;i++){ test[i]=rand()%100+5; printf("%d ",test[i]); } printf("\n"); myquick_sort(test,0,29); for(int i=0;i<30;i++) printf("%d ",test[i]); }
排序算法-冒泡——插入——快排,码迷,mamicode.com
原文地址:http://blog.csdn.net/sn_zzy/article/details/24701759