快速排序:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>#include<stdlib.h>
#include<string.h>
#include<time.h>
#define MAX 10
void printArray(int arr[], int len){
for (int i = 0; i < len; i++){
printf("%d ", arr[i]);
}
printf("\n");
}
//快速排序
void QuickSort(int arr[],int start, int end){
int i = start;
int j = end;
//取基准数
int target = arr[start];
if (i < j){
while (i < j){
//从右向左找比基准数大的
while (i < j && arr[j] < target){
j--;
}
if (i < j){
arr[i] = arr[j];
i++;
}
//从左向右找比基准数小的
while (i < j && arr[i] > target){
i++;
}
if (i < j){
arr[j] = arr[i];
j--;
}
}
//i的位置就是基准数最合适的位置
arr[i] = target;
//快速排序左半部分
QuickSort(arr,start,i - 1);
//快速排序有半部分
QuickSort(arr, i + 1, end);
}
}
int main(){
int arr[MAX];
srand((unsigned int)time(NULL));
for (int i = 0; i < MAX; i++){
arr[i] = rand() % MAX;
}
//排序前
printArray(arr, MAX);
//冒泡排序
QuickSort(arr, 0,MAX - 1);
//排序后
printArray(arr, MAX);
system("pause");
return EXIT_SUCCESS;
}
插入排序:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 10
void printArray(int arr[], int len){
for (int i = 0; i < len; i++){
printf("%d ", arr[i]);
}
printf("\n");
}
//插入排序
void InsertSort(int arr[],int len){
for (int i = 1; i < len; i ++){
if (arr[i] < arr[i - 1]){
int temp = arr[i];
int j = i - 1;
for (; j >= 0 && temp < arr[j]; j --){
arr[j + 1] = arr[j];
}
arr[j + 1] = temp;
}
}
}
int main(){
int arr[MAX];
srand((unsigned int)time(NULL));
for (int i = 0; i < MAX; i++){
arr[i] = rand() % MAX;
}
//排序前
printArray(arr, MAX);
//冒泡排序
InsertSort(arr, MAX);
//排序后
printArray(arr, MAX);
system("pause");
return EXIT_SUCCESS;
}
选择排序:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#define MAX 10
void printArray(int arr[], int len){
for (int i = 0; i < len; i++){
printf("%d ", arr[i]);
}
printf("\n");
}
//交换两个元素
void MySwap(int arr[], int i, int j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
//选择排序 升序
void SelectSort(int arr[],int len){
for (int i = 0; i < len; i ++){
int min = i;
for (int j = i; j < len; j ++){
if (arr[j] < arr[min]){
min = j;
}
}
if (min != i){
MySwap(arr, min, i);
}
}
}
int main(){
int arr[MAX];
srand((unsigned int)time(NULL));
for (int i = 0; i < MAX; i++){
arr[i] = rand() % MAX;
}
//排序前
printArray(arr, MAX);
//冒泡排序
SelectSort(arr, MAX);
//排序后
printArray(arr, MAX);
system("pause");
return EXIT_SUCCESS;
}
冒泡排序:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#define MAX 10
void printArray(int arr[],int len){
for (int i = 0; i < len;i++){
printf("%d ",arr[i]);
}
printf("\n");
}
//交换两个元素
void MySwap(int arr[],int i, int j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
//冒泡排序
void BubbleSort(int arr[], int len){
for (int i = 0; i < len; i ++){
for (int j = len - 1; j > i;j--){
if (arr[j] < arr[j-1]){
MySwap(arr,j,j-1);
}
}
}
}
//冒泡排序改进
void BubbleSort2(int arr[],int len){
int flag = 0; //没有排好
for (int i = 0; i < len && flag == 0; i++){
flag = 1; //认为已经排好
for (int j = len - 1; j > i; j --){
if (arr[j] < arr[j-1]){
flag = 0; //没有排好 再拍一次
MySwap(arr,j,j-1);
}
}
}
}
int main(){
int arr[MAX];
srand((unsigned int)time(NULL));
for (int i = 0; i < MAX; i++){
arr[i] = rand() % MAX;
}
//排序前
printArray(arr,MAX);
//冒泡排序
//BubbleSort(arr,MAX);
BubbleSort2(arr, MAX);
//排序后
printArray(arr, MAX);
system("pause");
return EXIT_SUCCESS;
}