常用的排序 冒泡 ,选择,插入,快速

来源:互联网 发布:淘宝网九阳榨汁机 编辑:程序博客网 时间:2024/05/20 06:51

快速排序:

#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;
}



阅读全文
0 0
原创粉丝点击