C语言的六种排序算法

11 篇文章 0 订阅
 #define _CRT_SECURE_NO_WARNINGS 

#include <stdio.h>
#include <stdlib.h>
#include "string.h"
#include "math.h"
#include "test.h"
#include "stdio.h"
#include "time.h"
//以下排序默认从小到大排序
 

void Swap2(int *a, int *b){//通过不创建临时变量交换a和b
	
	*a = *a + *b;//a=原a+原b
	*b = *a - *b;//b=原a
	*a = *a - *b;//a=原b

}
void Swap(int *p, int *q)//三步异或 交换
{
	*p = *p^*q;
	*q = *p^*q;
	*p = *p^*q;
}

void ShellSort(int *arr,int n){//希尔排序(可当作插入排序的改进)
	int j;
	for (int step = n >> 1; step >0; step>>= 1){//步长
		for (int i = step; i<n; i++){
			int temp = arr[i]; 
			for (j = i - step; j >= 0&&arr[j]>temp; j -= step)
				arr[j + step] = arr[j]; 
			arr[j + step] = temp;
		}
	}
}
 
void LnsertSort1(int arr[], int n)//插入排序
{
	int i = 0;
	int j = 0;
	for (i = 1; i < n; i++)
	{
		int temp = arr[i];
		 
		for (j = i - 1; arr[j] > temp && j >= 0;j--){
				arr[j + 1] = arr[j];
				 
			}
			arr[j + 1] = temp;
	}
}

void Bubble_Sort(int arr[], int length)	//冒泡排序
{
	int i, j, t;
	int flag = 0;
	for (i = 0; i < length - 1; i++){	//外层循环 
		flag = 0;
		for (j = 0; j < length - i-1 ; j++){	//内层循环 
			if (arr[j] > arr[j + 1]){	 
				flag = 1;
				t = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = t;
			}
		}
		if (!flag)break;
	}
}
void SawpSort(int a[], int n)//交换排序
{
	for (int i = 1; i<n; i++)
	for (int j = i - 1; j >= 0 && a[j]>a[j + 1]; j--)
		Swap2(&a[j], &a[j + 1]);
		
}
 
void Quick_Sort(int a[],int begin,int end){//快速排序
	if (end < begin)return;
	int jz = a[begin];//定一个基准数
	int i = begin;
	int j = end;
	int temp = 0;
	while (i != j){
		while (i<j&&a[j] >=jz)j--;
		while (i<j&&a[i] <= jz)i++;
		if (i < j){
			  temp = a[i];
			a[i] = a[j];
			a[j] = temp;
		}
	}
	

	 
	a[begin] = a[i];
	a[i] = jz;


	Quick_Sort(a, begin, i - 1);
	Quick_Sort(a, i + 1,end);





}

void Chi_Sort(int a[], int n){//选择排序
	int i = 0;
	int j = 0;
	for (i = 0; i < n - 1; i++){
		for (j = i + 1; j < n; j++){
			if (a[i]>a[j])Swap(&a[i], &a[j]);
		}
	}
}


int main(){

	int a[10];
	for (int i = 0; i < 10; i++)a[i] = rand();
	int n = sizeof(a) / sizeof(a[0]);

	clock_t start, finish;     
	double Total_time;         
	start = clock();//1.447ms
	//Chi_Sort(a, n);
	//Quick_Sort(a, 0, n - 1);//0.689
	SawpSort(a, n);//1.347ms
	//Bubble_Sort(a, n);//0.854ms
	//ShellSort(a, n);//0.734ms
	//LnsertSort1(a, n);//0.766ms
	for (int i = 0; i < n; i++)printf("%d ", a[i]);
	finish = clock();
	Total_time = (double)(finish - start) / CLOCKS_PER_SEC;    //单位换算,换算成毫秒
	printf("运行时间%0.7f ms\n", Total_time);
	 
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值