请分别举例实现冒泡排序,快速排序,选择排序,插入排序。(求能在eclipse里运行的例子原码,谢谢了。

解决方案 »

  1.   

    http://blog.csdn.net/qiushyfm/archive/2009/07/13/4345588.aspx去我的博客看吧,很多
      

  2.   

    太巧了 恰好我都写过/**
     * 插入排序法 ---简单插入排序排序 整体思路--后面得元素向前搜索 其插入位置
     */
    static void InsertSort(int[] sqList, boolean is_smallTbig) { // is_smallTbig排练方式 //不放入for中是因为考虑算法运行速度
    int sentinel = 0;// 哨兵
    int j, i;
    if (is_smallTbig) {
    for (i = 1; i < sqList.length; i++) {
    sentinel = sqList[i];
    for (j = i - 1; j >= 0; j--) {
    if (sqList[j] > sentinel) // 小到大顺序
    sqList[j + 1] = sqList[j];// 比sentinel大则向后移动 直到空出j的位置
    else {
    break;
    }
    }
    sqList[j + 1] = sentinel; // 把sentinel 放到 空出的j的位置 因为for出来j-1了
    // 所以j+1
    }
    } else {
    for (i = 1; i < sqList.length; i++) {
    sentinel = sqList[i];
    for (j = i - 1; j >= 0; j--) {
    if (sqList[j] < sentinel) // 大到小顺序
    sqList[j + 1] = sqList[j];// 比sentinel大则向后移动 直到空出j的位置
    else {
    break;
    }
    }
    sqList[j + 1] = sentinel; // 把sentinel 放到 空出的j的位置 因为for出来j-1了
    // 所以j+1
    }
    } } /**
     * 插入排序法 ---shell(希尔)排序(不稳定)
     */
    static void ShellSort(int[] sqList, boolean is_smallTbig) {
    // 使数组部分有序 整体上 大(小)的在后面小(大)的在前面 时间复杂度为O(n^(3/2))
    int[] step = { 9, 5, 3, 1 };// 最后一位必须为1
    int s, t;
    int sentinel = 0;// 哨兵
    if (is_smallTbig) {
    for (int i = 0; i < step.length; i++) {
    s = step[i]; // 取步长
    for (int j = s; j < sqList.length; j++) {
    // 分组进行排序 组的步长就是S
    sentinel = sqList[j];
    t = j - s;
    // 对步长为s的组进行排序 使之有序
    for (; t >= 0 && (t <= sqList.length); t = t - s) {
    if (sentinel < sqList[t])// 小到大排序
    {
    sqList[t + s] = sqList[t];
    } else {
    break;
    }
    }
    sqList[t + s] = sentinel;
    }
    }
    } else {
    for (int i = 0; i < step.length; i++) {
    s = step[i]; // 取步长
    for (int j = s; j < sqList.length; j++) {
    // 分组进行排序 组的步长就是S
    sentinel = sqList[j];
    t = j - s;
    // 对步长为s的组进行排序 使之有序
    for (; t >= 0 && (t <= sqList.length); t = t - s) {
    if (sentinel > sqList[t]) // 大到小排序
    {
    sqList[t + s] = sqList[t];
    } else {
    break;
    }
    }
    sqList[t + s] = sentinel;
    }
    }
    } } /**
     * 交换排序法-----冒泡排序 整体思路(已两两交换) 先找出数组中最大(小)的元素放在其位置
     */
    static void BubbleSort(int[] sqList, boolean is_smallTbig) {
    int sentinel = 0;
    int i = sqList.length, j = 0;
    if (is_smallTbig) {
    for (boolean change = true; i > 0 && change; i--) {
    change = false;// 如何已经有序则不用拍
    for (j = 1; j < i; j++) {
    sentinel = sqList[j];
    if (sentinel < sqList[j - 1]) {
    change = true;
    sqList[j] = sqList[j - 1];
    sqList[j - 1] = sentinel;
    } }
    }
    } else {
    for (boolean change = true; i > 0 && change; i--) {
    change = false;// 如何已经有序则不用拍
    for (j = 1; j < i; j++) {
    sentinel = sqList[j];
    if (sentinel > sqList[j - 1]) {
    sqList[j] = sqList[j - 1];
    sqList[j - 1] = sentinel;
    change = true;
    } }
    }
    } } /**
     * 交换排序法----- 快速排序 没有检测如入的合法性(不稳定)
     */
    int myQuicksort(int a[], int indexI, int indexJ) {
    int tempindex, start = indexI, end = indexJ, res;
    tempindex = indexI;
    if (indexI < 0 || indexJ < 0) {
    res = 0;
    }
    if (indexI >= indexJ) {
    res = 0;
    } else {
    boolean swich = true;
    while (true) {
    if (swich) {
    if (a[indexJ] < a[tempindex]) {
    int t;
    t = a[indexJ];
    a[indexJ] = a[tempindex];
    a[tempindex] = t;
    tempindex = indexJ;
    swich = false;
    } else {
    indexJ--;
    } } else {
    if (a[indexI] > a[tempindex]) {
    int t;
    t = a[indexI];
    a[indexI] = a[tempindex];
    a[tempindex] = t;
    tempindex = indexI;
    swich = true;
    } else {
    indexI++;
    }
    }
    if (indexJ <= indexI)
    break;
    }
    res = myQuicksort(a, start, tempindex - 1);
    res = myQuicksort(a, tempindex + 1, end);
    }
    return res;
    } /**
     * 选择排序法-----简单选择排序(不稳定)
     */
    static void selectSort(int[] sqList, boolean is_smallTbig) {
    int sentinel = 0, tempIndex = 0;
    if (is_smallTbig) {
    for (int i = 0; i < sqList.length; i++) {
    tempIndex = i;
    sentinel = sqList[i];
    for (int j = i + 1; j < sqList.length; j++) {
    sentinel = (sentinel < sqList[j]) ? sentinel
    : sqList[tempIndex = j];// 记录最小值的index
    }
    sqList[tempIndex] = sqList[i];
    sqList[i] = sentinel;
    }
    } else {
    for (int i = 0; i < sqList.length; i++) {
    sentinel = sqList[i];
    tempIndex = i;
    for (int j = i + 1; j < sqList.length; j++) {
    sentinel = (sentinel > sqList[j]) ? sentinel
    : sqList[tempIndex = j];
    }
    sqList[tempIndex] = sqList[i];
    sqList[i] = sentinel;
    }
    } } /**
     * 选择排序法-----堆排(不稳定)
     */
    public class HeapSort {
    public void sort(int[] number) {
    int[] tmp = new int[number.length + 1]; // 配合說明,使用一個有徧移的暫存陣列
    for (int i = 1; i < tmp.length; i++) {
    tmp[i] = number[i - 1];
    }
    createHeap(tmp);
    int m = number.length;
    while (m > 1) {
    swap(tmp, 1, m);
    m--;
    int p = 1;
    int s = 2 * p;
    while (s <= m) {
    if (s < m && tmp[s + 1] < tmp[s])
    s++;
    if (tmp[p] <= tmp[s])
    break;
    swap(tmp, p, s);
    p = s;
    s = 2 * p;
    }
    } // 這邊將排序好的暫存陣列設定回原陣列
    for (int i = 0; i < number.length; i++) {
    number[i] = tmp[i + 1];
    }
    } private void createHeap(int[] tmp) {
    int[] heap = new int[tmp.length];
    for (int i = 0; i < heap.length; i++)
    heap[i] = -1;
    for (int i = 1; i < heap.length; i++) {
    heap[i] = tmp[i];
    int s = i;
    int p = i / 2;
    while (s >= 2 && heap[p] > heap[s]) {
    swap(heap, p, s);
    s = p;
    p = s / 2;
    }
    }
    for (int i = 1; i < tmp.length; i++)
    tmp[i] = heap[i];
    } private void swap(int[] number, int i, int j) {
    int t;
    t = number[i];
    number[i] = number[j];
    number[j] = t;
    }
    }