常用的排序算法
1.冒泡排序法:是指计算机的一种排序方法,它的时间复杂度为O(n^2),虽然不及堆排序、快速排序的O(nlogn,底数为2),但是有两个优点:1)“编程复杂度”很低,很容易写出代码;2)具有稳定性,这里的稳定性是指原序列中相同元素的相对顺序仍然保持到排序后的序列,而堆排序、快速排序均不具有稳定性。不过,一路、二路归并排序、不平衡二叉树排序的速度均比冒泡排序快,且具有稳定性,但速度不及堆排序、快速排序。冒泡排序是经过n-1趟子排序完成的,第i趟子排序从第1个数至第n-i个数,若第i个数比后一个数大(则升序,小则降序)则交换两数。
例子:
View Code
public *int Sort(int[] list){
int temp;
for(int i=0; i<list.length; i++){
for(int j=0; j<list.length-i; j++){
if(list[j] < list[j+1]) {
temp=list[j];
list[j]=list[j+1];
list[j+1]=temp;
}
}
}
return list;
}
2 选择排序法:第i趟简单选择排序是指通过n-i次关键字的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录进行交换。共需进行i-1趟比较,直到所有记录排序完成为止。例如:进行第i趟选择时,从当前候选记录中选出关键字最小的k号记录,并和第i个记录进行交换。
View Code
1 void SelectSort(RecordType r[], int length){
2 int n=length;
3 for ( int i=1 ; i<= n-1; ++i) {
4 int k=i;
5 for ( int j=i+1 ; j<= n ; ++j)
6 if (r[j].key < r[k].key )
7 k=j;
8 if ( k!=i) {
9 int x= r[i];
10 r[i]= r[k];
11 r[k]=x;
12 }
13 }
14 }
3 插入排序法:把欲插入的数与数组中各数逐个比较, 当找到第一个比插入数大的元素i时,该元素之前即为插入位置。然后从数组最后一个元素开始到该元素为止,逐个后移一个单元。最后把插入数赋予元素a[i]即可。如果被插入数比所有的元素值都小则插入最前位置。
View Code
1 void charupx(int before,int m)
2 {
3 int varout,varin,temp;
4 for (varout=1;varout<m;varout++)
5 {
6 temp=before[varout]; //这是目标数(假设的)
7 varin=varout-1
8 while(varin>=0&&temp<before[varin])
9 {
10 before[varin+1]=before[varin];
11 varin--;
12 }
13 before[varin+1]=temp;
14 }
15 }
4 希尔排序:希尔排序法(缩小增量法) 属于插入类排序,是将整个无序列分割成若干小的子序列分别进行插入排序的方法。先取一个正整数d1<n,把所有序号相隔d1的数组元素放一组,组内进行直接插入排序;然后取d2<d1,重复上述分组和排序操作;直至di=1,即所有记录放进一个组中排序为止.
代码中所有组轮流进行排序的
View Code
1 void SortShell(int [] list) {
2 int l = list.length;
3 for (int n=l/2; n>0; n=n/2){
4 for (int t = n; t < l; t ++){
5 int temp = list[t]
6 while (temp < list[t-n] && t > 0) {
7 list[t] = list[t-n];
8 t -= n;
9 }
10 list[t+n] = temp;
11 }
12 }
13 }
代码中每组单独进行排序
View Code
1 public void SortShell(int [] list) {
2 int inc;
3 for(inc=1;inc<=list.Length/9;inc=3*inc+1);
4 for(;inc>0;inc/=3) {
5 for(int x= inc; x < 2 * inc; x++){
6 for(int i=x+1;i<=list.Length;i+=inc) {
7 int t=list[i-1];
8 int j=i;
9 while((j>inc)&&(list[j-inc-1]>t)) {
10 list[j-1]=list[j-inc-1];
11 j-=inc;
12 }
13 list[j-1]=t;
14 }
15 }
16 }
17

浙公网安备 33010602011771号