[经典排序算法][集锦]

经典排序算法

     经典排序算法,以下文章参考了大量网上的资料,大部分都给出了出处

这一系列重点在理解,所以例子什么的都是最简单的情况,难免失误之处,多指教

大多数排序算法都给出了每一步的状态,以方便初学者更容易理解,通俗易懂,部分难以理解的排序算法则给出了大量的图示,也算是一个特色吧

经典排序算法 - 快速排序Quick sort 

经典排序算法 - 桶排序Bucket sort

经典排序算法 -  插入排序Insertion sort

经典排序算法 - 基数排序Radix sort

经典排序算法 - 鸽巢排序Pigeonhole sort

经典排序算法 - 归并排序Merge sort

经典排序算法 - 冒泡排序Bubble sort

经典排序算法 - 选择排序Selection sort

经典排序算法 - 鸡尾酒排序Cocktail sort

经典排序算法 - 希尔排序Shell sort

经典排序算法 - 堆排序Heap sort序

经典排序算法 - 地精排序Gnome Sort

经典排序算法 - 奇偶排序Odd-even sort

经典排序算法 - 梳排序Comb sort

经典排序算法 - 耐心排序Patience Sorting

经典排序算法 - 珠排序Bead Sort

经典排序算法 - 计数排序Counting sort

新增

经典排序算法 - Proxmap Sort

经典排序算法 - Flash Sort

经典排序算法 - Strand Sort

经典排序算法 - 圈排序Cycle Sort

经典排序算法 - 图书馆排序(Library Sort)

[持续更新]

 

 

出个小题目

已知数组长度为100,且基本有序,里面有仅有两个数字位置不对,但具体是那两个数字不知道,数字不重复

例如[1 99 2 3 4 5 6 7 8 9 10 11 …… 88 89 90 91 92 93 94 95 96 97 98 2 100 ]

要求从小到大排序



------------------------------------------
除非特别声明,文章均为原创,版权与博客园共有,转载请保留出处
posted @ 2011-11-23 14:46 kkun 阅读(3557) 评论(27) 编辑 收藏

 回复 引用 查看   
#1楼2011-11-23 15:14 | 繁星皓月      
呵呵,学习学习,支持一下
 回复 引用 查看   
#2楼[楼主]2011-11-23 15:27 | kkun      
引用繁星皓月:呵呵,学习学习,支持一下

谢谢支持

 回复 引用 查看   
#3楼2011-11-23 15:44 | 菜鸟吴迪      
帅哥,开始 研究算法了1,^_^
 回复 引用 查看   
#4楼[楼主]2011-11-23 15:52 | kkun      
引用菜鸟吴迪:帅哥,开始 研究算法了1,^_^

嗯,以前老怕不敢看,现在发现其实大部分还是很简单的,也挺有意思,呵呵

 回复 引用 查看   
#5楼2011-11-23 15:53 | Weshadow      
顶一个呀····
 回复 引用 查看   
#6楼2011-11-23 15:59 | 遗失的天空      
额 好多啊 支持
 回复 引用 查看   
#7楼2011-11-23 16:50 | 十一月的雨      
顶一个
 回复 引用 查看   
#8楼2011-11-23 17:10 | 阿 飞      
这么多排序啊,顶起来
 回复 引用 查看   
#9楼2011-11-23 19:07 | MyNewID      
收藏了...
 回复 引用 查看   
#10楼2011-11-24 00:55 | Hailoong      
感谢楼主分享。
 回复 引用 查看   
#11楼2011-11-24 09:01 | I'm CY      
收藏了
 回复 引用 查看   
#12楼2011-11-24 09:18 | ITMelody      
菜鸟谢过园主。
 回复 引用 查看   
#13楼2011-11-24 09:28 | iTech      
太好了,学习!
 回复 引用 查看   
#14楼2011-11-24 09:31 | Repository      
看了一个,Quick Sort排序思想没讲明白。不够细。
 回复 引用 查看   
#15楼2011-11-24 09:36 | 丫头小静(Cathy)      
支持,建议用程序实践一下会更好
 回复 引用 查看   
#16楼[楼主]2011-11-24 09:54 | kkun      
引用Repository:看了一个,Quick Sort排序思想没讲明白。不够细。

两点,1是谁比我小站我前边,比我大站我后边,
2是站完要就分成了两组,前半组都比后半组小
之后一样了,分别对前半组和后半组再快排

 回复 引用 查看   
#17楼[楼主]2011-11-24 09:55 | kkun      
谢谢以上兄弟捧场,不一一回复了
 回复 引用 查看   
#20楼[楼主]2011-11-24 10:40 | kkun      
引用贤达:http://zh.wikipedia.org/wiki/%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95

你这个和下边这个链接里,是我"发现"算法的来源
http://en.wikipedia.org/wiki/Proxmap_sort

Bubble sort
Cocktail sort
Odd–even sort
Comb sort
Gnome sort
Quicksort
Stooge sort
Bogosort

Selection sort
Heapsort
Smoothsort
Cartesian tree sort
Tournament sort
Cycle sort

Insertion sort
Shell sort
Tree sort
Library sort
Patience sorting

Merge sort
Polyphase merge sort
Strand sort

American flag sort
Bead sort
Bucket sort
Burstsort Counting sort
Pigeonhole sort
Proxmap sort
Radix sort
Flashsort

Bitonic sorter
Batcher odd–even mergesort
Pairwise sorting network

Timsort
Introsort
Spreadsort
UnShuffle sort
JSort

Spaghetti sort

Bogosort
Topological sorting
Pancake sorting

 回复 引用 查看   
#21楼2011-11-24 13:15 | 大白糖      
顶一下,,顺便mark
 回复 引用 查看   
#22楼2011-11-25 16:03 | 潇洒一回      
看了几个排序,原理讲得很不错。支持下。
 回复 引用 查看   
#23楼2011-11-29 09:25 | parabeyond      
  int[] list = {1,2,3,4,8,6,7,5,9,10 };
            for (int i = 0; i < list.Length; i++)
            {
                int temp = i + 1;
                if (temp != list[i])
                {
                    temp = list[i];
                    list[i] = list[temp - 1];
                    list[temp - 1] = temp;
                    break;
                }
            }
            foreach (var item in list)
            {
                Console.WriteLine(item);
            }

 回复 引用 查看   
#24楼2011-12-08 13:48 | 天边芳草      
支持一下
 回复 引用 查看   
#25楼2011-12-08 21:06 | yuronglong      
#include <iostream>
using namespace std;
int main()
{
int a[101];
int temp,flag=0,tmp;
a[0]=0;
for(int i=1;i<=100;i++)
{
cin>>a[i];
}
for(int i=1;i<=100;i++)
{
if(flag==2)
{
a[temp]=a[i-1];
a[i-1]=tmp;
break;
}
if((a[i]>a[i+1])||(a[i]<a[i-1]))
{
tmp=a[i];
temp=i;
flag++;
}
}
for(int i=1;i<=100;i++)cout<<a[i]<<" ";
cout<<"\n";
system("pause");
return 0;
}

 回复 引用 查看   
#26楼2011-12-08 21:07 | yuronglong      
忘了语法高亮了
#include <iostream>
using namespace std;
int main()
{
    int a[101];
    int temp,flag=0,tmp;
    a[0]=0;
    for(int i=1;i<=100;i++)
    {
        cin>>a[i];
    }
    for(int i=1;i<=100;i++)
    {
        if(flag==2)
        {
            a[temp]=a[i-1];
            a[i-1]=tmp;
            break;
        }
        if((a[i]>a[i+1])||(a[i]<a[i-1]))
        {
            tmp=a[i];
            temp=i;
            flag++;
        }
    }
    for(int i=1;i<=100;i++)cout<<a[i]<<"  ";
    cout<<"\n";
    system("pause");
    return 0;
}

 回复 引用 查看   
#27楼2011-12-16 11:11 | xhp      
博主,头像不错。