#include <stdio.h>
// 打印数组
void display(int a[], int n) {
int i;
for(i = 0; i < n; i++) {
printf("%d ", a[i]);
}
printf("\n");
}
// 交换数组中两个元素
void swap(int a[], int i, int j) {
int temp;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
// 冒泡排序 稳定 最好时间复杂度O(n) 最坏时间复杂度O(n^2) 空间复杂度 1
void Bubble_sort(int a[], int n) {
for(int i = 0; i < n-1; i++) {
int flag = 0;
for(int j = 0; j < n-1-i; j++) {
if(a[j] > a[j+1]) {
swap(a, j, j+1);
flag = 1;
}
}
if(flag == 0) break;
}
}
// 插入排序 稳定 最好时间复杂度O(n),最坏时间复杂度O(n^2), 空间复杂度为1
void Insertion_Sort(int a[], int n) {
int i, j, tmp;
for(i = 1; i < n; i++) {
tmp = a[i];
for(j = i; j > 0 && a[j-1] > tmp; j--)
a[j] = a[j-1];
a[j] = tmp;
}
}
// 选择排序 不稳定 最好时间复杂度O(n^2),最坏时间复杂度O(n^2), 空间复杂度为1
void Selection_Sort(int a[], int n){
int min,i,j;
for(i=0; i<n-1; i++){
min=i;
for(j=i+1; j<n;j++){
if(a[j]<a[min])
min=j;
}
swap(a,i,min);
}
}
// 快速排序 不稳定 最好时间复杂度O(nlog n),最坏时间复杂度O(n^2), 空间复杂度为O(nlog n)
void Quick_Sort(int a[], int low, int high){
if(low<high){
int i=low;
int j=high;
int tmp = a[i];
while(i<j){
while(i<j && a[j]>tmp)j--;
if(i<j) a[i]=a[j];
while(i<j && a[i]<tmp)i++;
if(i<j) a[j]=a[i];
}
a[i]=tmp;
Quick_Sort(a, low, i-1);
Quick_Sort(a, i+1, high);
}
}
int main() {
int array[] = {
49, 38, 65, 97, 76, 13, 27, 49, 10
};
int size = sizeof(array) / sizeof(int);
// 打印数据
printf("算法排序前的数组:");
display(array, size);
//printf("冒泡排序");
//Bubble_sort(array, size);
//printf("插入排序");
//Insertion_Sort(array, size);
//printf("选择排序");
//Selection_Sort(array, size);
printf("快速排序");
Selection_Sort(array, size);
printf("后的数组:");
display(array, size);
return 0;
}
C语言实现冒泡排序、插入排序、选择排序、快速排序
最新推荐文章于 2023-04-07 21:09:51 发布