簡單排序演算法

2021-08-07 03:06:20 字數 4338 閱讀 7851

[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...