日期:2014-05-20  浏览次数:20891 次

新年散分,回帖均有分,顺便收集排序算法
新的一年已经开始了,在此祝大家新年快乐!在新的一年里工作更上一层楼!

顺便在这里收集一些排序算法,以int数组为例,条件是不要用Sort方法,否则一个Array.Sort()就搞定了。

我先发一个冒泡排序的算法(稍微优化了一下):

C# code
        private int[] ArraySort(int[] array)
        {
            int temp;
            bool noSwap = true;
            for (int i = 0; i < array.Length; i++)
            {
                for (int j = i + 1; j < array.Length; j++)
                {
                    if (array[i] > array[j])
                    {
                        temp = array[i];
                        array[i] = array[j];
                        array[j] = temp;
                        noSwap = false;
                    }
                }
                if (noSwap) return array;//没有再发生交换,排序结束
                else noSwap = true;
            }
            return array;
        }


------解决方案--------------------
新年快乐~
------解决方案--------------------
up
------解决方案--------------------
探讨
新年快乐~

------解决方案--------------------
heh ,又多学了一招。
谢谢lz
新年快乐
------解决方案--------------------
用二叉树排序,左小右大,左子树优先遍历。
------解决方案--------------------
新年快乐。。。
------解决方案--------------------
新年快乐。。。
------解决方案--------------------
哈哈,新年快乐
------解决方案--------------------
新年快乐!!!
------解决方案--------------------
路过
C# code
private static void Shell_Sort(int[] b)
        {
            int[] a = new int[b.Length];
            b.CopyTo(a, 0);
            int key;
            Console.WriteLine("Shell排序");
            int gap=5,k;
            for(;gap>0;gap/=2)
                for (int j = gap; j < 10; j++)
                {
                    if (a[j] < a[j - gap])
                    {
                        key = a[j];
                        for (k = j - gap; k >= 0 ; k -= gap)
                        {
                            if (key < a[k])
                            {
                                a[k + gap] = a[k];
                            }
                            else
                                break;
                        }
                        a[k + gap] = key;

                    }
                }

            Print(a);
        }

------解决方案--------------------
up
------解决方案--------------------
/**
 * 插入排序数组
 * @author Edwin
 * @version 1.1
 */
public class InsertionArray {
 /**
* 插入排序数组
* @param lngArr为要排序的数组
*/
public void insertionSort(long[]lngArr)
{
int intOut=0,intIn=0,intElems=lngArr.length;
for(intOut=1; intOut<intElems; intOut++)
{
long temp = lngArr[intOut]; 
intIn = intOut; 
while(intIn>0 && lngArr[intIn-1] >= temp) 
{
lngArr[intIn] = lngArr[intIn-1];
--intIn; 
}
lngArr[intIn] = temp;
} // end for