栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

算法(C语言)-快速排序-学习笔记08

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

算法(C语言)-快速排序-学习笔记08

所有代码实现:Tian-hy/c_ds

1. 介绍
  • 复杂度:O(nlgn)
  • 通过一个基准值和两个指针来实现
2. 实现
  • 用递归写了实现,然后通过调用qsort也实现了下
#include 
#include 

#define N 15

int quick_sort(int *data, int low, int high);
int partion(int *data, int low, int high); 
void show(int *data);
int compare(const void *p1, const void *p2);

int main(int argc, char *argv[]){
	int data[N] = {0};
	int i;

	srandom(10);

	for (i=0; i
		data[i] = random()%100;
	}

	show(data);
	quick_sort(data, 0, N-1);
	show(data);


	for (i=0; i
		data[i] = random()%100;
	}

	show(data);
	qsort(data, N, sizeof(int), compare); //调用
	show(data);
}

int quick_sort(int *data, int low, int high){
	int t;
	if (data == NULL){
		return -1;
	}
	if (low >= high)
		return 0;

	t = partion(data, low, high);
	quick_sort(data, low, t-1);
	quick_sort(data, t+1, high);
	return 0;
}

int partion(int *data, int low, int high){
	int temp = data[low];
	while(low < high){
		while (low < high && temp <= data[high])
			high--;
		data[low] = data[high];
		while (low < high && temp >= data[low]){
			low++;
		}
		data[high] = data[low];
	}
	data[low] = temp;
	return low;
}


void show(int *data){
	for (int i=0; i
		printf("%d ", data[i]);
	}
	puts("");
}

int compare(const void *p1, const void *p2){
	return (*(const int *)p1>*(const int *)p2);
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/968345.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号