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

本文详细介绍了三种常见的排序算法:冒泡排序、插入排序和快速排序。通过具体的C语言实现代码展示了每种算法的工作原理及步骤,并提供了运行实例。

冒泡排序,往两个方向泡,一个往小泡,一个网大泡

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值