c语言 快速排序法
原创
©著作权归作者所有:来自51CTO博客作者初学java的小菜的原创作品,请联系作者获取转载授权,否则将追究法律责任
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void Swap(int* a, int* b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
int select_sort(int arr[], int L, int R)
{
int key = L;
int prev = L;
int cur = L + 1;//注意建立三个常量 一个代表 数组最左边,一个代表数组最右边,还有一个选取第一个数字做标准。 用左右两边得数和标注做比较 。
//单趟排序
while (cur <= R)
{
if (arr[cur] < arr[key])
{
prev++;
Swap(&arr[cur], &arr[prev]);
}
cur++;
}
Swap(&arr[prev], &arr[key]);
return prev;
}
void select_sort1(int arr[], int L, int R)
{
if (L >= R)
return;
int keyi = select_sort(arr, L, R);
//[left,keyi-1] keyi [key+1,R]
//左区间 有序
select_sort1(arr, L, keyi - 1);
//右区间有序
select_sort1(arr, keyi + 1, R);
}
int main()
{
int arr[5];
printf("请输入arr的内容:");
for (int i = 0; i < 5; i++)
{
scanf("%d", &arr[i]);
}
int sz = sizeof(arr) / sizeof(arr[0]);
select_sort1(arr, 0, sz - 1);
for (int i = 0; i <= 4; i++)
printf("%d ", arr[i]);
return 0;
}