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、快速排序
快速排序一般用于数据非常庞大的时候,效率会比前两种方法高得多
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);
}
}