一、 选择排序
#include <stdio.h>
void swap(int* a, int* b){
*a = *a ^ *b;
*b = *a ^ *b;
*a = *a ^ *b;
}//选择排序
void selectSort(int arr[], int n){
for(int i = 0; i < n-1; i++){
int min = i; //记录最小元素的下标
for(int j = i+1; j < n; j++){
if(arr[min] > arr[j])
min = j; //修改最小元素的下标
}
if(min != i)
swap(&arr[min], &arr[i]);
}
}int main(int argc, const char *argv[])
{
int arr[] = {12, 34, 3, 45, 67, 32, 90, 4, 55, 9, 35, 43};int len = sizeof(arr)/sizeof(arr[0]);
selectSort(arr, len);for(int i = 0; i < len; i++)
printf("%-3d", arr[i]);
putchar(10);
return 0;
}
二、 冒泡排序
#include <stdio.h>
void swap(int* a, int *b){
*a = *a ^ *b;
*b = *a ^ *b;
*a = *a ^ *b;
}
//从左到右
void bubble_sort(int arr[], int n){
for(int i = 0; i < n-1; i++){
for(int j = 0; j < n-i-1; j++){
if(arr[j] > arr[j+1])
swap(&arr[j], &arr[j+1]);
}
}
}
//从右到左
void bubble_sort01(int arr[], int n){
for(int i = n-1; i > 0; i--){
for(int j = n-1; j > n-i-1; j--){
if(arr[j] > arr[j-1]){
swap(&arr[j], &arr[j-1]);
}
}
}
}
int main(int argc, const char *argv[])
{
int arr[] = {23, 43, 4, 56, 89, 2, 34};
int n = sizeof(arr)/sizeof(arr[0]);
bubble_sort01(arr, n);
for(int i = 0; i < n; i++)
printf("%-3d", arr[i]);
return 0;
}
三、 直接插入排序
#include <stdio.h>
void insertSort(int A[], int n){
for(int i = 1; i < n; i++){
int tmp = A[i];
int j = i - 1;
while(j >= 0 && A[j] > tmp){
A[j+1] = A[j];
j--;
}
A[j+1] = tmp;
}
}int main(int argc, const char *argv[])
{
int arr[] = {12, 32, 6, 73, 23, 43, 23, 87, 12, 32, 68, 43};int len = sizeof(arr) / sizeof(arr[0]);
insertSort(arr, len);for(int i = 0; i < len; i++){
printf("%-3d", arr[i]);
}
putchar(10);
return 0;
}
四、快速排序
#include <stdio.h>
int partition(int arr[], int low, int high){ //一趟划分
int pivot = arr[low]; //设数组第一个元素为枢轴元素
while(low < high){
while(low < high && arr[high] >= pivot) high--; //找到右半部分第一个不大于枢轴元素
arr[low] = arr[high];
while(low < high && arr[low] <= pivot) low++; //找到左半部分第一个不小于枢轴元素
arr[high] = arr[low];
}
arr[low] = pivot; //枢轴元素存放位置
return low;
}
void quickSort(int arr[], int low, int high){
if(low < high){
int pivotpos = partition(arr, low, high);
quickSort(arr, low, pivotpos - 1); //对左半部分快排
quickSort(arr, pivotpos + 1, high); //对右半部分快排
}
}
int main(int argc, const char *argv[])
{
int arr[] = {100, 23, 34, 56, 4, 45, 87, 54, 12, 35};
int len = sizeof(arr) / sizeof(arr[0]);
quickSort(arr, 0, len-1);
for(int i = 0; i < len; i++){
printf("%-3d", arr[i]);
}
putchar(10);
return 0;
}