冒泡排序,往兩個方向泡,一個往小泡,一個網大泡
#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]);
}