排序算法-冒泡——插入——快排

冒泡排序,往兩個方向泡,一個往小泡,一個網大泡

#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]);
}
点赞