#include <stdio.h>
#include <stdlib.h>
typedef struct {
int height;
int id;
}people;
/*
* 多条件排序用到的快速排序重定义
*/
int compare(const void* a, const void *b){
if((*(people *)a).height != (*(people *)b).height){
return (*(people *)a).height > (*(people *)b).height;
}
return (*(people *)a).id > (*(people *)b).id;
}
/*
* 快速排序:是冒泡排序的一种改进
*/
void quickSort(int *arr, int left, int right){
if(left > right){
return;
}
int temp = arr[left], i = left, j = right, exchange;
while (i < j){
while (i < j && arr[j] > temp){
j--;
}
while (i < j && arr[i] <= temp){
i++;
}
if(i < j){
exchange = arr[i];
arr[i] = arr[j];
arr[j] = exchange;
}
}
arr[left] = arr[i];
arr[i] = temp;
quickSort(arr, left, i-1);
quickSort(arr, i+1, right);
}
/*
* 冒泡排序
*/
void bubbleSort(int *arr, int n){
for (int i = 0; i < n - 1; ++i) {
for (int j = 0; j < n-i-1; ++j) {
if(arr[j+1] < arr[j]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
/*
* 选择排序
*/
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[j] < arr[min]){
min = j;
}
}
int temp = arr[min];
arr[min] = arr[i];
arr[i] = temp;
}
}
/*
* 插入排序
*/
void insertSort(int *arr, int n){
for (int i = 1; i < n; ++i) {
int temp = arr[i];
int j;
for (j = i - 1; j >= 0 && arr[j] > temp ; --j) {
arr[j+1] = arr[j];
}
arr[j+1] = temp;
}
}
/*
* 希尔排序
* 步长为n/2
*/
void shellSort(int *arr, int n){
int gap;
for (gap = n / 2; gap >= 1; gap /= 2) {
for (int i = gap; i < n; ++i) {
int temp = arr[i];
int j;
for (j = i - gap; j >= 0 && arr[j] > temp; j -= gap) {
arr[j+gap] = arr[j];
}
arr[j+gap] = temp;
}
}
}
/*
* 多条件排序
*/
void multiSort(people *people ,int n){
qsort(people,n, sizeof(*people),compare);
}
int main(){
int arr[10] = {5,1,7,9,10,34,12,7,3,91};
people data[6] = {{165,1},{174,2},
{174,3},{174,4},
{165,5},{165,6}};
quickSort(arr,0,9);
//bubbleSort(arr,10);
//selectSort(arr,10);
//insertSort(arr,10);
//shellSort(arr,10);
multiSort(data,6);
for (int i = 0; i < 10; ++i) {
printf("%d ",arr[i]);
}
printf("\n");
for (int i = 0; i < 6; ++i) {
printf("height:%d, id:%d\n",data[i].height,data[i].id);
}
return 0;
}
C语言--六钟排序总结
最新推荐文章于 2024-08-10 11:34:15 发布