已完成以下算法:冒泡排序,插入排序,希尔排序,快速排序,基数排序
来源:互联网 发布:js configurable 编辑:程序博客网 时间:2024/06/04 18:25
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
/// <summary>
/// 冒泡排序
/// </summary>
/// <param name="arr"></param>
public
void
Sort(
int
[] arr)
{
for
(
int
i = arr.Length - 1; i > 0; i--)
{
for
(
int
j = 0; j < i; j++)
{
if
(arr[i] < arr[j])
{
int
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
/// <summary>
/// 插入排序
/// </summary>
/// <param name="arr"></param>
public
void
Sort(
int
[] arr)
{
for
(
int
i = 1; i < arr.Length; i++)
{
int
t = arr[i];
int
j = i;
while
((j > 0) && (arr[j - 1] > t))
{
arr[j] = arr[j - 1];
//交换顺序
--j;
}
arr[j] = t;
}
}
/// <summary>
/// 快速排序
/// </summary>
/// <param name="list"></param>
/// <param name="low"></param>
/// <param name="high"></param>
public
void
Sort(
int
[] list,
int
low,
int
high)
{
int
pivot;
int
l, r;
int
mid;
if
(high <= low)
return
;
else
if
(high == low + 1)
{
if
(list[low] > list[high])
Swap(
ref
list[low],
ref
list[high]);
return
;
}
mid = (low + high) >> 1;
pivot = list[mid];
Swap(
ref
list[low],
ref
list[mid]);
l = low + 1;
r = high;
do
{
while
(l <= r && list[l] < pivot)
l++;
while
(list[r] >= pivot)
r--;
if
(l < r)
Swap(
ref
list[l],
ref
list[r]);
}
while
(l < r);
list[low] = list[r];
list[r] = pivot;
if
(low + 1 < r)
Sort(list, low, r - 1);
if
(r + 1 < high)
Sort(list, r + 1, high);
}
/// <summary>
/// 交换位置ExchageValue
/// </summary>
/// <param name="l"></param>
/// <param name="r"></param>
private
void
Swap(
ref
int
l,
ref
int
r)
{
int
temp;
temp = l;
l = r;
r = temp;
}
/// <summary>
/// 希尔排序
/// </summary>
/// <param name="arr"></param>
public
void
Sort(
int
[] arr)
{
int
inc;
for
(inc = 1; inc <= arr.Length / 9; inc = 3 * inc + 1) ;
for
(; inc > 0; inc /= 3)
{
for
(
int
i = inc + 1; i <= arr.Length; i += inc)
{
int
t = arr[i - 1];
int
j = i;
while
((j > inc) && (arr[j - inc - 1] > t))
{
arr[j - 1] = arr[j - inc - 1];
//交换数据
j -= inc;
}
arr[j - 1] = t;
}
}
}
/// <summary>
/// 基数排序
/// </summary>
/// <param name="arr"></param>
/// <param name="digit"></param>
/// <returns></returns>
public
int
[] Sort(
int
[] arr,
int
digit)
{
//low to high digit
for
(
int
k = 1; k <= digit; k++)
{
//temp array to store the sort result inside digit
int
[] tmpArray =
new
int
[arr.Length];
//temp array for countingsort
int
[] tmpCountingSortArray =
new
int
[10] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
//CountingSort
for
(
int
i = 0; i < arr.Length; i++)
{
//split the specified digit from the element
int
tmpSplitDigit = arr[i] / (
int
)Math.Pow(10, k - 1) - (arr[i] / (
int
)Math.Pow(10, k)) * 10;
tmpCountingSortArray[tmpSplitDigit] += 1;
}
for
(
int
m = 1; m < 10; m++)
{
tmpCountingSortArray[m] += tmpCountingSortArray[m - 1];
}
//output the value to result
for
(
int
n = arr.Length - 1; n >= 0; n--)
{
int
tmpSplitDigit = arr[n] / (
int
)Math.Pow(10, k - 1) - (arr[n] / (
int
)Math.Pow(10, k)) * 10;
tmpArray[tmpCountingSortArray[tmpSplitDigit] - 1] = arr[n];
tmpCountingSortArray[tmpSplitDigit] -= 1;
}
//copy the digit-inside sort result to source array
for
(
int
p = 0; p < arr.Length; p++)
{
arr[p] = tmpArray[p];
}
}
return
arr;
}
0 0
- 已完成以下算法:冒泡排序,插入排序,希尔排序,快速排序,基数排序
- C++算法 冒泡排序,快速排序,插入排序,希尔排序,计数排序,基数排序 性能比较
- 各种排序算法总结----基数排序、归并排序、插入排序、冒泡排序、选择排序、快速排序、堆排序、希尔排序
- C# 插入排序 冒泡排序 选择排序 快速排序 堆排序 归并排序 基数排序 希尔排序
- 排序算法----冒泡排序+插入排序+选择排序+快速排序+希尔排序+堆排序+归并排序+计数排序+基数排序+桶排序(c语言)
- 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法, 冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。
- 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。
- 冒泡排序、选择排序、插入排序、希尔排序、快速排序、基数排序
- 各种常见的排序,冒泡排序,选择排序,插入排序,希尔排序,堆排序,快速排序,基数排序,桶排序
- 各种排序算法实现——基数排序、归并排序、插入排序、冒泡排序、选择排序、快速排序、堆排序、希尔排序
- 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序
- 【Java】八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序
- 八大经典排序算法基本思想及代码实现(插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序,基数排序)
- 常用的排序算法:插入排序,希尔排序,冒泡排序,选择排序,快速排序,归并排序
- 冒泡、插入、希尔和快速排序算法
- 排序算法汇总(选择排序 ,直接插入排序,冒泡排序,希尔排序,快速排序...)
- 冒泡排序,选择排序,插入排序,希尔排序,合并排序,快速排序算法
- C++ ------------排序算法(冒泡排序-快速排序-选择排序-插入排序-希尔排序)
- 状态模式(State)
- 8086汇编语言 Masm for windows 2012.5调试经验
- Android Studio如何快速生成get,set,tostring,构造函数
- poj 1932(spfa判断环)
- 物理地址和总线地址区别
- 已完成以下算法:冒泡排序,插入排序,希尔排序,快速排序,基数排序
- java-io-接口
- centos7.0 没有netstat 和 ifconfig命令问题
- android studio 显示网页源码 inputstream bufferedreader stringbuffer
- HDOJ 2035 人见人爱A^B(快速幂求模)
- WEB重点
- python日志简单用法
- pat1010. Radix
- 从ramdisk根文件系统启动Linux