quick_sort.c
#include "stdio.h"
void swap_int(int* x, int* y) {
int t = *x;
*x = *y;
*y = t;
}
void swap_float(float* x, float* y) {
float t = *x;
*x = *y;
*y = t;
}
/******************************
@function:递归方式快速排序——int类型
@param:arr--数组,start--排序起始位置,len--排序结束位置,位置都是相对数组而言,起始0
@return:void
@remark:对arr数据内数据进行排序,排序结果在arr内
例如对数组arr[10]进行排序,quick_sort_recursive_int(arr,0,10-1)
******************************/
void quick_sort_recursive_int(int arr[], int start, int end) {
if (start >= end)
return;
int mid = arr[end];
int left = start, right = end - 1;
while (left < right) {
while (arr[left] < mid && left < right)
left++;
while (arr[right] >= mid && left < right)
right--;
swap_int(&arr[left], &arr[right]);
}
if (arr[left] >= arr[end])
swap_int(&arr[left], &arr[end]);
else
left++;
if (left)
quick_sort_recursive_int(arr, start, left - 1);
quick_sort_recursive_int(arr, left + 1, end);
}
/******************************
@function:递归方式快速排序——float类型
@param:arr--数组,start--排序起始位置,len--排序结束位置,位置都是相对数组而言,起始0
@return:void
@remark:对arr数据内数据进行排序,排序结果在arr内
例如对数组arr[10]进行排序,quick_sort_recursive_int(arr,0,10-1)
******************************/
void quick_sort_recursive_float(float arr[], int start, int end) {
if (start >= end)
return;
float mid = arr[end];
int left = start, right = end - 1;
while (left < right) {
while (arr[left] < mid && left < right)
left++;
while (arr[right] >= mid && left < right)
right--;
swap_float(&arr[left], &arr[right]);
}
if (arr[left] >= arr[end])
swap_float(&arr[left], &arr[end]);
else
left++;
if (left)
quick_sort_recursive_float(arr, start, left - 1);
quick_sort_recursive_float(arr, left + 1, end);
}
/******************************
@function:快速排序——int类型
@param:arr--数组,len--数据个数
@return:void
@remark:对arr数据内数据进行排序,排序结果在arr内
******************************/
void quick_sort_int(int arr[], int len) {
quick_sort_recursive_int(arr, 0, len - 1);
}
/******************************
@function:快速排序——float类型
@param:arr--数组,len--数据个数
@return:void
@remark:对arr数据内数据进行排序,排序结果在arr内
******************************/
void quick_sort_float(float arr[], int len) {
quick_sort_recursive_float(arr, 0, len - 1);
}
quick_sort.h
#ifndef _quick_sort_H_
#define _quick_sort_H_
void quick_sort_int(int arr[], int len);
void quick_sort_float(float arr[], int len);
#endif
使用示例:
int main()
{
int arr[10] = { 2,1,4,3,-10,8,5,9,0,7 },i = 0;
float arr2[10] = { 2,1,4,3,-10,8,5,9,0,7 };
quick_sort_int(arr, 10);
quick_sort_float(arr2, 10);
for (i = 0; i < 10; i++)
{
printf("%d ",arr[i]);
}printf("\n");
for (i = 0; i < 10; i++)
{
printf("%.3f ", arr2[i]);
}
while (1);
}