排序的算法
先做一个private static 方法 返回值是 int[]数组
然后写上OrderBy() ;
参数 数组(int[] array)也就是说你给我一个数组
我帮你排个序
private static int[] OrderBy(int[] array) ;
{
}
//不管这个数组有多少个元素
//这个算法是通用的,是所有的数组,只要是int[]数组,它都能用
//所以我们现在写的是一个算法
//假设这个数组是2/8/6/1
private static int[] OrderBy(int[] array) ;
{
//第一个元素array[0], i从1开始,i<array.Length小于后面总长度, i++自增
for(int i=1;i<array.Length;i++ )
{
//用第一个array[0] 和后面的array[i]比,如果array[i]比array[0]小
//那么就交换
if(array[0] > array[i])
{
}
}
//用第二个(array[1])和后面对比取最小
for(int i=2; i<array.Length; i++ )
{
if(array[1] > array[i])
{
}
}
//用第三个(array[2])和后面对比取最小
for(int i=3; i<array.Length; i++ )
{
if(array[2] > array[i])
{
}
}
}
//因为内不循环要做三遍+
//所以再套一个for循环
//当前索引从0开始(int currentIndex = 0;)
//到哪里结束,倒数第二个(currentIndex< array.Length -1)
//currentIndex自增
for(int currentIndex = 0;currentIndex< array.Length -1;currentIndex++)
{
for(int i=1;i<array.Length;i++ )
{
if(array[0] > array[i])
{
}
}
}
//需要与后面比较的元素
//逻辑需要当前的int currentIndex = 0,依次和后面比较
//那么就先取出第一个currentIndex = 0;和后面int i=currentIndex+1比
//再取出第二个,和2后面比;再取出第三个,再和3后面比.....
for(int currentIndex = 0;currentIndex< array.Length -1;currentIndex++)
{
//当前索引(currentIndex)和后面(currentIndex+1)/int i比较
for(int i=currentIndex+1; i<array.Length; i++ )
{
//当前索引(currentIndex)和后面比较
if(array[currentIndex] > array[i])
{
//如果.成立进行交换(当前元素大于被比较的元素)
//先明确谁array[currentIndex]跟谁array[i]交换
int temp = array[currentIndex];
array[currentIndex]=array[i]
array[i] = temp;
}
}
}
//最后循环做完了,退出循环
return array;
private static int[] OrderBy(int[] array) ;
{
for(int currentIndex = 0;currentIndex< array.Length -1;currentIndex++)
{
for(int i=currentIndex+1; i<array.Length; i++ )
{
if(array[currentIndex] > array[i])
{
int temp = array[currentIndex];
array[currentIndex]=array[i]
array[i] = temp;
}
}
}
return array;
}
这种排序方法,性能上还能优化
这是一种最简单,直观的排序
private static int[] OrderBy(int[] array) ;
{
for(int currentIndex = 0;currentIndex< array.Length -1;currentIndex++)
{
//记录位置要在外层循环的里面,内层循环的外面
//在这里声明一个变量(minIndex = i, i=currentIndex, int minIndex = currentIndex;)
int minIndex = currentIndex;
for(int i=currentIndex+1; i<array.Length; i++ )
{
if(array[currentIndex] > array[i])
{
//现在我们在这里记录需要交换的索引[i],不做交换
minIndex = i;
}
}
//运行到这里内层for循环已经执行完毕
//根据比较结果进行交换,从而提高代码效率
}
return array;
}
------------------------------------------
private static int[] OrderBy(int[] array) ;
{
//02....假设第一轮开始比较的时候
for(int currentIndex = 0;currentIndex< array.Length -1;currentIndex++)
{
//03....这里int currentIndex = 0,就是把0给了int minIndex
int minIndex = currentIndex;
//08....接下来第二次比较的时候
for(int i=currentIndex+1; i<array.Length; i++ )
{
//01....这里将array[currentIndex]修改成array[minIndex]
//04....这里array[minIndex]就变成了array[0]
//05....然后array[0]和后面array[i]去比
//06....如果一旦发现该交换了
//09....array[minIndex]就是上一次的[i]索引
//10....然后再去和后面array[i]去比
if(array[minIndex] > array[i])
{
//07....minIndex不做交换,而是把i存起来
//11....如果又发现,还要换
//12....再次把i存到minIndex里,
//13....至此根本没有做过交换,什么时候再做交换呢?
minIndex = i;
}
}
//14....这里做交换
//15....需要做一个判断minIndex不等于currentIndex,才做交换
if(minIndex != currentIndex)
{
int temp = array[currentIndex];
array[currentIndex]=array[i]
array[i] = temp;
}
}
return array;
}
---------------
private static int[] OrderBy(int[] array) ;
{
for(int currentIndex = 0;currentIndex< array.Length -1;currentIndex++)
{
int minIndex = currentIndex;
for(int i=currentIndex+1; i<array.Length; i++ )
{
if(array[minIndex] > array[i])
{
minIndex = i;
}
}
if(minIndex != currentIndex)
{
int temp = array[currentIndex];
array[currentIndex]=array[i]
array[i] = temp;
}
}
return array;
}
int temp = array[currentIndex];
array[currentIndex]=array[minIndex]
array[minIndex] = temp;
这是冒泡排序法