[cpp]view plain
copy
/*name: 簡單排序演算法
author: 巧若拙
description: 簡單排序演算法
函式1:用氣泡排序法對陣列a進行排序(非遞減序列)
函式2:用選擇排序法對陣列a進行排序(非遞減序列)
函式3:用插入排序法對陣列a進行排序(非遞減序列)
函式4:用桶排序法對陣列a進行排序(非遞減序列)
*/#include
using
namespace
std;
const
intm = 100;
const
intn = 10;
intt[n+1];
//桶排序專用陣列(元素值為0-n的整數)
void
printarray(
const
inta,
intlow,
inthigh);
void
bubblesort (
inta,
intn);
//用氣泡排序法對陣列a進行排序(非遞減序列)
void
selectionsort(
inta,
intn);
//用選擇排序法對陣列a進行排序(非遞減序列)
void
insertsort(
inta,
intn);
//用插入排序法對陣列a進行排序(非遞減序列)
void
bubblesort_0(
inta,
intn);
//氣泡排序演算法0:逆序掃瞄,將最小值放到下方
void
bubblesort_1(
inta,
intn);
//氣泡排序改進演算法1:設定交換操作標誌
void
bubblesort_2(
inta,
intn);
//氣泡排序改進演算法2:將待排序列的上界縮小到最後一次發生交換的位置處
void
bubblesort_3(
inta,
intn);
//氣泡排序改進演算法2:雙向冒泡(雞尾酒排序)
void
insertsort_1(
inta,
intn);
//插入排序改進演算法1:二分插入
void
insertsort_2(
inta,
intn);
//插入排序改進演算法2:希爾排序
void
bucketsort(
inta,
intn);
//用桶排序法對陣列a進行排序(非遞減序列)
intmain()
; int
a0[m] = ;
inta1[m] = ;
inta2[m] = ;
inta3[m] = ;
intb[m] = ;
intc[m] = ;
intc1[m] = ;
intc2[m] = ;
intd[m] = ;
intn = 8;
bubblesort(a, n);//氣泡排序演算法
printarray(a, 0, n-1);
bubblesort_0(a0, n);//氣泡排序改進演算法0
printarray(a0, 0, n-1);
bubblesort_1(a1, n);//氣泡排序改進演算法1
printarray(a1, 0, n-1);
bubblesort_2(a2, n);//氣泡排序改進演算法2
printarray(a2, 0, n-1);
bubblesort_3(a3, n);//氣泡排序改進演算法3
printarray(a3, 0, n-1);
selectionsort(b, n);//選擇排序演算法
printarray(b, 0, n-1);
insertsort(c, n);//插入排序演算法
printarray(c, 0, n-1);
insertsort_1(c1, n);//插入排序改進演算法1
printarray(c1, 0, n-1);
insertsort_2(c2, n);//插入排序改進演算法2
printarray(c2, 0, n-1);
bucketsort(d, n);//用桶排序法對陣列a進行排序(非遞減序列)
printarray(d, 0, n-1);
return
0;
} //輸出陣列a中區域[low,high]的元素
void
printarray(
const
inta,
intlow,
inthigh)
void
bubblesort(
inta,
intn)
//用氣泡排序法對陣列a進行排序(非遞減序列)
} } }
void
bubblesort_0(
inta,
intn)
//氣泡排序演算法0:逆序掃瞄,將最小值放到下方
} } }
void
bubblesort_1(
inta,
intn)
//氣泡排序改進演算法1:設定交換操作標誌
} } }
void
bubblesort_2(
inta,
intn)
//氣泡排序改進演算法2:將待排序列的上界縮小到最後一次發生交換的位置處
} } }
void
bubblesort_3(
inta,
intn)
//氣泡排序改進演算法2:雙向冒泡(雞尾酒排序)
} for(
intj=high; j>low; j--)
//逆序掃瞄a[low+1..high]
} } }
void
selectionsort(
inta,
intn)
//用選擇排序法對陣列a進行排序(非遞減序列)
if(p != i)
//將最小元素交換到下標i處
} } void
insertsort(
inta,
intn)
//用插入排序法對陣列a進行排序(非遞減序列)
a[p] = temp;
} }
void
insertsort_1(
inta,
intn)
//插入排序改進演算法1:二分插入
for(int
j=i; j>low; j--)
//移動元素以騰出插入位置
a[j] = a[j-1];
a[low] = temp;
} }
/*插入排序在對幾乎已經排好序的資料操作時,效率高,幾乎可以達到線性排序的效率,但進行插入操作時,每次只能將資料移動一位,難免出現大量重複移動,
如果能將元素盡可能快的移動到它「該去」的地方,將大大減少重複移動的次數,提高效率。
希爾排序是把全部元素分組排序,將所有距離為步長gap的元素放在同乙個組中,通過「跳躍式移動」的方法,能讓元素每次移動一大步,
即步長gap>1,大大提高了移動的效率。一趟排序下來,雖然同組的元素沒有挨在一起,各組元素相互隔開,但是由於每一組都已經各自排好序了,
所以整個序列還是「基本有序」的。
然後再取越來越小的步長進行排序,直到步長gap=1時,就是普通的插入排序,但是到了這步,整個序列是「基本有序」了,直接插入排序也能高效完成。
*/void
insertsort_2(
inta,
intn)
//插入排序改進演算法2:希爾排序
a[p] = temp;
} }
} void
bucketsort(
inta,
intn)
//用桶排序法對陣列a進行排序(非遞減序列)
for(int
i=0,t=0; i<=n; i++)
//將元素裝回陣列(元素最大值為n)
} 寧波鼻部整形:
簡單排序演算法
package com.shine.sort 排序演算法 說明 排序演算法分為三種 插入排序 交換排序 選擇排序 1.插入排序 直接插入排序 折半插入排序 希爾排序 2.交換排序 氣泡排序 快速排序 3.選擇排序 直接選擇排序 堆排序 public class mysort 希爾排序 描述 1.將乙...
簡單排序演算法
演算法思想 將初始序列 a 0 a n 1 作為待排序序列,第一趟在待排序序列 a 0 a n 1 中找最小值元素,與該序列中第乙個元素a 0 交換,這樣的子串行 a 0 有序,下一趟排序在待排序子串行 a 1 a n 1 中進行。第i趟排序在待排序子串行 a i 1 a n 1 中,找最小值元素,...
簡單排序演算法
第乙個 氣泡排序 簡單來說,就是不停的與旁邊的比較,然後交換,總之運算的交換次數挺多的,後面再來比較幾種排序方法 void bubblesorthead int pdata,int count 這是一種實現形式,還有另一種 void bubblesorttail int pdata,int coun...