1. 算法不依赖于语言,所以说某种语言有几种排序方法是不好的表达 另外如果把有文献讨论过的排序算法都算上,那么除了珠排序这种需要特殊计算机的排序算法,其他算法C都能很容易实现 2. 桶排序和基数排序是不同的两种算法,楼主给出的应该算是一种桶排序 3. 选择排序不是常用算法,因为太慢了 除非是在特别的计算机模型上(比如主存读取速度远远大于写入速度的硬件上) 4. 数组大小不是C语言的限制,而是特定环境下堆栈大小的限制,放在所有函数之外就不会发现这种问题。 5. 冒泡不一定比选择慢,对于一个长度为n的数组排序,冒泡的最佳情况是n-1次比较,而选择是(n+1)(n-2)次 6. 还有一种有名的排序算法没有提到,Shell sort(希尔排序) |
[ 本帖最后由 henk 于 2012-11-16 20:46 编辑 ]\n\n #include<stdio.h> /*快速排序*/ int quick_sort(int *a, int n, int left, int right) { int s, i, j; int temp; if(left < right) { s = a[left]; i = left; j = right + 1; while(1) { while(i + 1 < n && a[++i] > s); while(j - 1 > -1 && a[--j] < s); if(i >= j) { break; } temp = a; a = a[j]; a[j] = temp; } a[left] = a[j]; a[j] = s; quick_sort(a, n, left, j - 1); quick_sort(a, n, j + 1, right); } return 0; } int main() { int i,n; int arr[n]; printf("请输入一个整数:"); scanf("%d",&n); printf("请输入%d个整数:",n); for(i = 0; i < n; i++) { scanf("%d",&arr); } for(i = 0; i < n; i++) { printf("arr[%d]=%d\n", i, arr); } quick_sort(arr, n, 0, (n-1)); printf("排序后:\n"); for(i = 0; i < n; i++) { printf("arr[%d]=%d\n", i, arr); } sleep(10000); return 0; } |
非常不错!!!!!!!!! |
非常不错!!!!!!!!! |
顶,感谢版主的分享~ |
刚好对排序不熟,谢了。。。 |
哪位高手会快排的,麻烦贴一下,供大家学习学习 |
高手啊,都看不懂是什么! |