#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;
}
C语言的六种排序算法
于 2021-05-31 17:42:36 首次发布