1.冒泡排序
#include<stdio.h>
#include<stdbool.h>
void swap(int* a, int* b)//交换函数
{
int temp;
temp =*a;
*a = *b;
*b = temp;
}
void bubble_sort(int arr[],int n)
{
for (int i = 0; i < n - 1; i++)//冒泡排序至多进行n-1趟
{
bool flag = false;
for (int j = n - 1; j > i; j--)//一趟中,两两进行对比
{
if (arr[j - 1] > arr[j])
{
swap(&arr[j - 1], &arr[j]);//交换
flag = true;
}
}
if (flag == false)
return;//本趟遍历后没变换,说明已经有序
}
}
void print(int arr[], int n)
{
int i = 0;
for (i = 0; i < n; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int main()
{
int arr[10] = { 5,7,4,2,1,0,3,6,9,8 };
int n = sizeof(arr) / sizeof(arr[0]);
print(arr, n);
bubble_sort(arr, n);
print(arr, n);
return 0;
}
2.快速排序
#include<stdio.h>
int partition(int arr[], int low, int high)
{
int pivot = arr[low];//定义枢值
while (low < high)
{
if (low < high && arr[high] >= pivot)
high--;
arr[low] = arr[high];
if (low < high && arr[low] < pivot)
low++;
arr[high] = arr[low];
}
arr[low] = pivot;
return low;
}
void quick_sort(int arr[], int low, int high)
{
if(low<high)
{
int pivotpos=partition(arr, low, high);//划分
quick_sort(arr, low, pivotpos - 1);//划分左部分
quick_sort(arr, pivotpos + 1, high);//划分有部分
}
}
void print(int arr[], int n)
{
int i = 0;
for (i = 0; i <n; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int main()
{
int arr[10] = { 5,7,4,2,1,0,3,6,9,8 };
int n = sizeof(arr) / sizeof(arr[0]);
print(arr, n);
quick_sort(arr,0, n-1);
print(arr, n);
return 0;
}