1. excel对数组进行排序
C语言将数组元素大小排序方法: 以下使用的是冒泡排序法实线数组从小到大排序。 思想:每次相邻两个数比较,若升序,则将大的数放到后面,一次循环过后,就会将最大的数放在最后。
10、2、3、4、5、6、9、8、7、1是输入的待排序的数列,经过第一次排序,将最大的,10放在最后,第二次排序,将剩下的2、3、4、5、6、9、8、7、1进行冒泡,将当前最大的9放在倒数第二的位置,以此类推。 以下是具体代码:
#include
2. 数组如何排序
数组排序: 升序
简单的几种排序方法:
1.选择排序: 每一轮都选择一个最大的, 放在最后面
2.冒泡排序: 每一轮比较相邻两个元素, 小的放前面, 大的放后面
3.插入排序: 将数组分成两部分, 一部分是已经排好的, 另一部分挨个访问, 插入到前一部分合适的地方
3. 如何对数组排序
1.插入排序
算法思想
插入排序使用了两层嵌套循环,逐个处理待排序的记录。每个记录与前面已经排好序的记录序列进行比较,并将其插入到合适的位置。假设数组长度为n,外层循环控制变量i由1至n-1依次递进,用于选择当前处理哪条记录;里层循环控制变量j,初始值为i,并由i至1递减,与上一记录进行对比,决定将该元素插入到哪一个位置。这里的关键思想是,当处理第i条记录时,前面i-1条记录已经是有序的了。需要注意的是,因为是将当前记录与相邻的上一记录相比较,所以循环控制变量的起始值为1(数组下标),如果为0的话,上一记录为-1,则数组越界。
现在我们考察一下第i条记录的处理情况:假设外层循环递进到第i条记录,设其关键码的值为X,那么此时有可能有两种情况:
如果上一记录比X大,那么就交换它们,直到上一记录的关键码比X小或者相等为止。
如果上一记录比X小或者相等,那么之前的所有记录一定是有序的,且都比X小,此时退出里层循环。外层循环向前递进,处理下一条记录。
算法实现(C#)
public class SortAlgorithm {
// 插入排序
public static void InsertSort<T, C>(T[] array, C comparer)
where C:IComparer<T>
{
for (int i = 1; i <= array.Length - 1; i++) {
//Console.Write("{0}: ", i);
int j = i;
while (j>=1 && comparer.Compare(array[j], array[j - 1]) < 0) {
swap(ref array[j], ref array[j-1]);
j--;
}
//Console.WriteLine();
//AlgorithmHelper.PrintArray(array);
}
}
// 交换数组array中第i个元素和第j个元素
private static void swap<T>(ref T x,ref T y) {
// Console.Write("{0}<-->{1} ", x, y);
T temp = x;
x = y;
y = temp;
}
}
上面Console.WriteLine()方法和AlgorithmHelper.PrintArray()方法仅仅是出于测试方便,PrintArray()方法依次打印了数组的内容。swap<T>()方法则用于交换数组中的两条记录,也对交换数进行了打印(这里我注释掉了,但在测试时可以取消对它们的注释)。外层for循环控制变量i表示当前处理第i条记录。
public class AlgorithmHelper {
// 打印数组内容
public static void PrintArray<T>(T[] array) {
Console.Write(" Array:");
foreach (T item in array) {
Console.Write(" {0}", item);
}
Console.WriteLine();
}
}
// 获得Comparer,进行比较
public class ComparerFactory {
public static IComparer<int> GetIntComparer() {
return new IntComparer();
}
public class IntComparer : IComparer<int> {
public int Compare(int x, int y) {
return x.CompareTo(y);
}
}
}
上面这段代码我们创建了一个ComparerFactory类,它用于获得一个IntComparer对象,这个对象实现了IComparer<T>接口,规定了两个int类型的关键码之间比较大小的规则。如果你有自定义的类型,比如叫MyType,只需要在ComparerFactory中再添加一个类,比如叫MyTypeComparer,然后让这个类也实现IComparer<T>接口,最后再添加一个方法返回MyTypeComparer就可以了。
输出演示(C#)
接下来我们看一下客户端代码和输出:
static void Main(string[] args) {
int[] array = {42,20,17,13,28,14,23,15};
//int[] array = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
AlgorithmHelper.PrintArray(array);
SortAlgorithm.InsertSort
(array, ComparerFactory.GetIntComparer());
}
算法实现(C++)
// 对int类型进行排序
class IntComparer{
public:
static bool Smaller(int x, int y){
return x<y;
}
static bool Equal(int x, int y){
return x==y;
}
static bool Larger(int x, int y){
return x>y;
}
};
// 插入排序
template <class T, class C>
void InsertSort(T a[], int length){
for(int i=1;i<=length-1;i++){
int j = i;
while(j>=1 && C::Smaller(a[j], a[j-1])){
swap(a[j], a[j-1]);
j--;
}
}
}
2.冒泡排序
算法思想
如果你从没有学习过有关算法方面的知识,而需要设计一个数组排序的算法,那么很有可能设计出的就是泡沫排序算法了。因为它很好理解,实现起来也很简单。它也含有两层循环,假设数组长度为n,外层循环控制变量i由0到n-2递增,这个外层循环并不是处理某个记录,只是控制比较的趟数,由0到n-2,一共比较n-1趟。为什么n个记录只需要比较n-1趟?我们可以先看下最简单的两个数排序:比如4和3,我们只要比较一趟,就可以得出3、4。对于更多的记录可以类推。
数组记录的交换由里层循环来完成,控制变量j初始值为n-1(数组下标),一直递减到1。数组记录从数组的末尾开始与相邻的上一个记录相比,如果上一记录比当前记录的关键码大,则进行交换,直到当前记录的下标为1为止(此时上一记录的下标为0)。整个过程就好像一个气泡从底部向上升,于是这个排序算法也就被命名为了冒泡排序。
我们来对它进行一个考察,按照这种排序方式,在进行完第一趟循环之后,最小的一定位于数组最顶部(下标为0);第二趟循环之后,次小的记录位于数组第二(下标为1)的位置;依次类推,第n-1趟循环之后,第n-1小的记录位于数组第n-1(下标为n-2)的位置。此时无需再进行第n趟循环,因为最后一个已经位于数组末尾(下标为n-1)位置了。
算法实现(C#)
// 泡沫排序
public static void BubbleSort<T, C>(T[] array, C comparer)
where C : IComparer<T>
{
int length = array.Length;
for (int i = 0; i <= length - 2; i++) {
//Console.Write("{0}: ", i + 1);
for (int j = length - 1; j >= 1; j--) {
if (comparer.Compare(array[j], array[j - 1]) < 0) {
swap(ref array[j], ref array[j - 1]);
}
}
//Console.WriteLine();
//AlgorithmHelper.PrintArray(array);
}
}
输出演示(C#)
static void Main(string[] args) {
int[] array = {42,20,17,13,28,14,23,15};
AlgorithmHelper.PrintArray(array);
SortAlgorithm.BubbleSort
(array, ComparerFactory.GetIntComparer());
}
算法实现(C++)
// 冒泡排序
template <class T, class C>
void BubbleSort(T a[], int length){
for(int i=0;i<=length-2;i++){
for(int j=length-1; j>=1; j--){
if(C::Smaller(a[j], a[j-1]))
swap(a[j], a[j-1]);
}
}
}
3.选择排序
算法思想
选择排序是对冒泡排序的一个改进,从上面冒泡排序的输出可以看出,在第一趟时,为了将最小的值13由数组末尾冒泡的数组下标为0的第一个位置,进行了多次交换。对于后续的每一趟,都会进行类似的交换。
选择排序的思路是:对于第一趟,搜索整个数组,寻找出最小的,然后放置在数组的0号位置;对于第二趟,搜索数组的n-1个记录,寻找出最小的(对于整个数组来说则是次小的),然后放置到数组的第1号位置。在第i趟时,搜索数组的n-i+1个记录,寻找最小的记录(对于整个数组来说则是第i小的),然后放在数组i-1的位置(注意数组以0起始)。可以看出,选择排序显著的减少了交换的次数。
需要注意的地方是:在第i趟时,内层循环并不需要递减到1的位置,只要循环到与i相同就可以了,因为之前的位置一定都比它小(也就是第i小)。另外里层循环是j>i,而不是j>=i,这是因为i在进入循环之后就被立即保存到了lowestIndex中。
算法实现(C#)
public static void SelectionSort<T, C>(T[] array, C comparer)
where C : IComparer<T>
{
int length = array.Length;
for (int i = 0; i
4. excel 数组排序
1、打开一张工作表格,这里要求按照D列“销售金额”从小到大排列。萊垍頭條
2、选中任意单元格,这里选择G2单元格,点击【插入函数】按钮。頭條萊垍
3、在弹出的【插入函数】对话框中,选择“SMALL”函数,单击【确定】按钮。萊垍頭條
4、在【函数参数】选项框中点击“Array”后的小按钮,选中D列的数值区域且绝对引用;在“K”后填入“ROW(A1)”,单击【确定】按钮。條萊垍頭
5. 对数组里的数进行排序
工具/材料:电脑、Python、Pycharm1、首先,打开Python,定义一个数组,其值为空。
2、接着,输入数组的长度,保存在变量中。
3、用for循环,控制输入数组的各元素。
4、从键盘逐一输入数组各元素,并添加到数组中。
5、使用函数,将数组倒序(逆序)排列。
6、最后,输出倒序(逆序)排序后的数组值。
7、运行程序,输入数组的各元素值后,电脑会将数组倒序(逆序)排列并输出。
6. vba如何对数组排序
使用循环,因为vb中并未对矩阵运算提供支持
所以只能采用循环,将数组中每个元素单独计算
7. excel数组排序函数
SORT 将返回数组中排序的元素数组。 返回的数组与所提供的数组参数的形状相同。
语法:
=SORT(array,[sort_index],[sort_order],[by_col])
参数:
其中数组是将要进行排序的一组数,可以是一个区域,比如A1:C100,或者是个数组:{10,8,6,2,3}
sort_index是排序的依据,是数组参数的一行或者一列,比如A1:A100。这个参数是可选的,如果省略这个函数,就按照数组参数的第一行或者第一列进行排序
sort_order是排序方式,1代表升序,-1代表降序。这个参数是可选的,如果省略,就按照升序进行排序
by_col是排序方向。TRUE表示列方向排序,FALSE表示行方向进行排序。这个参数是可选的,如果省略,就进行行方向的排序。
8. 数组按列排序
无标题行,对A列按升序排序
Sub Macro1()
Range("A1").Select
Range("A:A").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
SortMethod:=xlPinYin, DataOption1:=xlSortNormal
End Sub
实际上,自己录制宏就知道了。
9. 数组按顺序排列
用random函数生成随机数,放入数组中,再用sort函数,对数组内容进行排序
10. 如何进行数组排序
(1)首先设定一个分界值,通过该分界值将数组分成左右两部分。
(2)将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值。
(3)然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。
(4)重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。
11. 怎么对数组进行排序
1、打开VB6.0,新建一个工程,在窗体中添加两个命令按钮,caption分别改为“升序排列”和“降序排列”。
2、将窗体Form1的caption属性改为“选择法数组排序”,将界面设置成下图。
3、在Load事件中写入如下代码。RandomizeFor i = 1 To 10a(i) = Int(Rnd * 101 + 100)Lbl1.Caption = Lbl1.Caption & a(i) & " "Next i。
4、在通用对话框对数组进行定义,使其成为窗体级变量:Dim a(1 To 10) As Integer。
5、双击“升序排列”命令按钮,进入代码编辑窗口,输入如下代码:For i = 1 To 9Min = a(i)For j = i + 1 To 10If a(j) < Min ThenMin = a(j)t = a(i): a(i) = a(j): a(j) = tEnd IfNext jNext iLbl2.Caption = ""For i = 1 To 10Lbl2.Caption = Lbl2.Caption & a(i) & " "Next i。
6、双击“降序排列”命令按钮,进入代码编辑窗口,输入如下代码:For i = 1 To 9Max = a(i)For j = i + 1 To 10If a(j) > Max ThenMax = a(j)t = a(i): a(i) = a(j): a(j) = tEnd IfNext jNext iLbl2.Caption = ""For i = 1 To 10Lbl2.Caption = Lbl2.Caption & a(i) & " "Next i。
7、关闭代码窗口,按下F5运行程序,产生10个随机数,标签中显示10个数。
8、单击“升序排列”命令按钮,标签一中的数组按升序排列在标签二中显示,如图。
9、单击“降序排列”命令按钮,标签一中的数组按降序排列在标签二中显示,如图。
- 相关评论
- 我要评论
-