1.バブルソート
バブルソートとは、トラバースするたびに、ソートされていない部分で最大の要素が最後に配置されることを意味します。N-1回トラバースした後、すべての要素が小さいものから大きいものへとソートされます。
int[] array = {
8, 7, 1, 5, 2, 3 };
for (int j = 0; j < array.Length-1; j++)//j表示冒泡次数,即遍历数组的次数
{
//遍历数组
for (int i = 0; i < array.Length - 1-j; i++) //内层循环索引随之递减
{
if (array[i] > array[i + 1])//如果当前元素比后面一个元素大,就交换位置
{
int temp = array[i];
array[i] = array[i + 1];
array[i + 1] = temp;
}
}
}
2.並べ替えを選択します
選択的ソートとは、トラバースされるたびに、ソートされていない部分で最小の要素が最後に配置されることを意味します。N-1回トラバースした後、すべての要素が最小から最大にソートされます。
int[] array = {
8, 7, 1, 5, 2, 3 };
for (int i= 0; i < array.Length-1; i++)
{
int mIndex = i;//暂且认为 i 位置就是最小的元素
for (int j = i+ 1; j < array.Length; j++)//找出最小的元素
{
if (array[j] < array[mIndex])
{
mIndex = i;
}
}
//将最小元素与 i 位置元素交换
int temp = array[i];
array[i] = array[mIndex];
array[mIndex] = temp;
}
3.クイックソート
クイックソートは通常、データが非常に大きい場合に使用され、効率は最初の2つの方法よりもはるかに高くなります
void sort(int[] arr, int min, int max)
{
int key = arr[min];//基准数
int start = min;//开始位置
int end = max;//结束位置
while (end > start)
{
//从后往前找,比基准数小的元素
while (end > start && arr[end] >= key)
{
end--;
}
if (arr[end] < key)//找到后,将start与end位置元素交换
{
int temp = arr[end];
arr[end] = arr[start];
arr[start] = temp;
}
//从前往后找,比基准数大的元素
while (end > start && arr[start] <= key)
{
start++;
}
if (arr[start] > key)//找到后,将start与end位置元素交换
{
int temp = arr[end];
arr[end] = arr[start];
arr[start] = temp;
}
}
if (start > min)//如果未排序完成,则通过递归,再次排序
{
sort(arr, min, start - 1);
}
if (end < max)
{
sort(arr, end + 1, max);
}
}